[英]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.