2016-02-18 124 views
0

在下面的例子中得到一個值,我想根據最小日期爲獲取狀態值:SQL:根據最小日期

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

如果你想最低日期,然後通過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()方法快。

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 

但是,這可能會導致一個問題,如果兩行具有相同的日期和不同的狀態。你會在領帶行之間隨機獲得一個狀態。