在以下示例中,我希望根据最短日期获取状态值:
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;
答案 0 :(得分:1)
只需使用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
但如果两行具有相同的日期和不同的状态,则会导致问题。您将在tie行之间获得随机状态。
答案 1 :(得分: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()
方法更快。