首页 > 解决方案 > Oracle SQL 查询在最大日期获取值

问题描述

数据:

| ORIGL_ORDER | ORDER | ITEM | DATE        | WHSE | QTY |
| ----------- | ----- | ---- | ----------  | ---- | --- |
| 001         | 107   | 9    | 12/29/2020  | 7    | 6   |
| 001         | 110   | 9    | 12/30/2020  | 1    | 4   |
| 001         | 113   | 9    | 12/30/2020  | 3    | 2   |
| 007         | 211   | 3    | 12/20/2020  | 6    | 1   |
| 007         | 219   | 3    | 12/19/2020  | 5    | 3   | 
| 018         | 390   | 8    | 12/25/2020  | 2    | 1   |

原始期望结果:

| ORIGL_ORDER | ORDER | ITEM | MAX_DATE    | WHSE |
| ----------- | ----- | ---- | ----------  | ---- |
| 001         | 113   | 9    | 12/30/2020  | 3    |
| 007         | 211   | 3    | 12/20/2020  | 6    |
| 018         | 390   | 8    | 12/25/2020  | 2    |

原始问题:对于每个 ORIGL_ORDER 和 ITEM,我想获取 max(DATE) 和与 max(Date) 对应的 WHSE。如果有多个订单具有相同的 max(DATE),则选择最大的订单号。

新的期望结果:

| ORIGL_ORDER | ORDER | ITEM | MAX_DATE    | WHSE | TOTAL_QTY |
| ----------- | ----- | ---- | ----------  | ---- | --------- |
| 001         | 113   | 9    | 12/30/2020  | 3    | 12        |
| 007         | 211   | 3    | 12/20/2020  | 6    | 4         |
| 018         | 390   | 8    | 12/25/2020  | 2    | 1         |

标签: sqloracle

解决方案


这回答了问题的原始版本。

只需使用row_number()

select t.*
from (select t.*,
             row_number() over (partition by ORIGL_ORDER, item order by date desc, order_number desc) as seqnum
      from t
     ) t
where seqnum = 1;

推荐阅读