【发布时间】:2021-06-27 02:38:26
【问题描述】:
在这种情况下,我有两个表,grn_item 表和 grn 表,我仅使用以下查询获取以下列。
select gi.item_no, g.grn_date, gi.price from grn_item gi
join grn g on gi.grn_no = g.grn_no
样本数据:
ITEM NO | GRN Date | Price
----------------------------------
IT00001 | 03-AUG-21 | 1.2
IT00001 | 01-JUN-21 | 5
IT00001 | 08-MAY-21 | 6
IT00001 | 19-MAR-21 | 7.2
IT00002 | 14-NOV-21 | 3.4
IT00002 | 08-OCT-21 | 1.7
IT00002 | 25-FEB-21 | 2.5
IT00003 | 08-MAY-21 | 4.3
IT00003 | 03-SEP-21 | 8.2
IT00003 | 15-JUL-21 | 0.4
IT00003 | 11-DEC-21 | 9.3
IT00003 | 22-SEP-21 | 10.2
我的要求有点棘手,不知道能不能实现,就是从最新的三个grn_date中得到每个item_no的最高价格的。
示例:- 以下是 IT00003 的最新 grn_dates 记录。
其中,最高价格为10.2
IT00003 | 03-SEP-21 | 8.2
IT00003 | 11-DEC-21 | 9.3
IT00003 | 22-SEP-21 | 10.2
所以我的预期结果应该如下所示。 grn_date 不需要显示,但我将其包含在下面以与上面的示例数据进行比较。
ITEM NO | GRN Date | max(Price)
----------------------------------
IT00001 | 08-MAY-21 | 6
IT00002 | 14-NOV-21 | 3.4
IT00003 | 22-SEP-21 | 10.2
我正在使用 Oracle DB,所以我使用类似的东西来获得预期。但是没有成功,可以这样做吗?
select * from (select * from (select gi.item_no, max(gi.price)
from grn_item gi join grn g on gi.grn_no = g.grn_no
order by g.grn_date desc) where rownum <= 3) group by gi.item_no
【问题讨论】:
-
您在预期输出中显示的日期似乎既不是每个项目的最早日期也不是最晚日期。请在这里解释你的逻辑。
-
我添加了解释,请不要关闭问题谢谢:)
标签: sql oracle aggregate-functions