首页 > 解决方案 > SELECT MAX 日期及其数量和该日期的 SUM 数量

问题描述

我正在使用 Oracle 11g。假设我有一个如下的交货表。下面的示例显示最晚日期是 2019 年 7 月 11 日,并且该项目以不同的数量交付了两次。如何获取最新日期(最大日期)及其数量以及数量的总和? 在此处输入图像描述

我已经尝试过,我得到了最大日期和最大数量的结果。但不是最大数量的总和。

SELECT DISTINCT k.item_no, 
MAX(k.date) OVER(PARTITION BY k.item_no) AS LATEST_DEL_DATE,
MAX(k.qty) KEEP(DENSE_RANK FIRST ORDER BY k.date DESC NULLS LAST) 
OVER(PARTITION BY k.item_no) AS LATEST_QUANTITY
FROM DEL k, DELCONFIRM h, ITEM o
where k.code_no=h.code_no
and k.item_no=o.item_no
AND k.qty<> 0
and k.item_no='123'
;

我希望输出结果看起来像

预期结果

标签: sqldatabaseoracle

解决方案


您可以JOIN将交货表导出到相关项目的最新交货日期的派生表,然后SUM是该日期的交货数量:

SELECT m.item_code, 
       m.max_date AS "Latest_delivery_date",  
       SUM(d1.quantity) AS "Total_delivered"
FROM (SELECT item_code, MAX(date) AS max_date
      FROM delivery
      WHERE item_code = 123) m
JOIN delivery d1 ON d1.item_code = m.item_code AND d1.date = m.max_date
GROUP BY m.item_code, m.max_date

输出:

item_code   Latest_delivery_date    Total_delivered
123         2019-11-07              17

dbfiddle 上的演示


推荐阅读