首页 > 解决方案 > SQL 无法使用 Group By 过滤特定日期

问题描述

这可能很简单,但我无法获得所需的输出。

我正在使用下面这个简单的查询来获取最新exp_dateitem_no

select g.item_no,max(g.exp_date)
from grn_drug_item g
group by g.item_no

第一个查询仅显示以下结果01-AUG-20

IT00002530 01-AUG-20

现在我想过滤“特定”最新的上述结果exp_date(例如:01-AUG-20如上所述),所以我将查询修改为:

select g.item_no,max(g.exp_date)
from grn_drug_item g
where g.exp_date = to_date('01-AUG-20','DD-MON-YY')
group by g.item_no

但这给了我多行,如果我使用where g.item_no = 'IT00002530'它会获取所需的输出。

我怎样才能让过滤器在此处为特定对象工作exp_date

标签: sqloraclegroup-bywhere-clause

解决方案


如果无法访问您的数据,这有点推测,但看起来您正在挑选具有较晚exp_date. 您的过滤器太早了 - 那些日期较晚特定日期的项目将包含在过滤器中,并且该子集中的最大日期显然是同一日期。

您可以在分组后应用过滤器having

select g.item_no,max(g.exp_date)
from grn_drug_item g
group by g.item_no
having max(g.exp_date) = to_date('01-AUG-20','DD-MON-YY')

'YY' 的使用有点令人担忧;使用两位数年份是个问题,但如果必须,请使用RR. 不过最好使用 4 位数年份,对于固定日期,使用日期文字更简单:

having max(g.exp_date) = date '2020-08-01'

推荐阅读