2016-02-18 154 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 

但是,这可能会导致一个问题,如果两行具有相同的日期和不同的状态。你会在领带行之间随机获得一个状态。