如何修改SQL查询,使“Days Since Last Pick”列仅显示大于15的值?
解决方案
你要筛选的是聚合计算后的列值,这种情况不能用WHERE(它仅用于过滤原始行数据),最简便的方式是用HAVING子句——它专门用来过滤分组后的聚合结果,直接放在GROUP BY后面即可。
另外提一句:你原SQL里SELECT后的DISTINCT是多余的,GROUP BY srcloc已经保证了每个srcloc只返回一行记录,没必要再加DISTINCT。
修改后的完整SQL如下:
select srcloc "location", max(pckdte) "Date", sysdate - max(pckdte) "Days Since Last Pick", count(distinct inventory_view.lodnum) "# of Pallets in Location" from pckwrk_view left join inventory_view on pckwrk_view.srcloc = inventory_view.stoloc join locmst on locmst.stoloc = inventory_view.stoloc where srcloc like 'LP%A' and locmst.useflg = 1 group by srcloc having sysdate - max(pckdte) > 15 -- 新增的筛选条件 order by max(pckdte) asc
如果想要代码更简洁,部分数据库(比如MySQL、PostgreSQL)允许在HAVING里直接用SELECT中的列别名,写成having "Days Since Last Pick" > 15也可以,但这种写法兼容性稍差;上面重复计算表达式的写法是所有数据库都支持的通用方案。
内容的提问来源于stack exchange,提问作者Davis Middeke
相关产品推荐
相关产品推荐

