繁体   English   中英

SQL:根据最短日期获取值

[英]SQL : getting a value according to the minimum date

在以下示例中,我想根据最短日期获取状态值:

 instId: status : instDate
 25478 : 5      : 18/02/16 13:32:14
 25478 : 3      : 18/02/16 13:32:05
 25478 : 1      : 18/02/16 13:32:11
 69854 : 9      : 18/02/16 16:22:10
 69854 : 5      : 18/02/16 16:22:26
 69854 : 4      : 18/02/16 16:22:15

输出将是

25478 : 3
69854 : 9

编辑:我正在这样做,但似乎不起作用

select instId, MAX(status) KEEP (DENSE_RANK FIRST ORDER BY instDate DESC NULLS LAST) STATUS
from sales
group by instId;

只需使用ROW_NUMBER()

SELECT instId, status
FROM (
        SELECT instId, status, 
               row_number() over (partition by instId
                                  order by date) as rn
        FROM YourTable
     ) T
WHERE rn = 1

但这会导致问题,如果两行具有相同的日期和不同的状态。 您将在关系行之间获得随机状态。

如果您需要最短的日期,请通过ASC而不是DESC进行订购:

select instId,
       MAX(status) KEEP (DENSE_RANK FIRST ORDER BY instDate ASC NULLS LAST) as STATUS
       -----------------------------------------------------^
from sales
group by instId;

我发现这通常比row_number()方法快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM