2016-07-19 34 views
1

這個問題基於SQL query to select distinct row with minimum value。 考慮表:如何從最小值的幾行中選擇一行

id game point 
1 x  1 
1 y  10 
1 z  1 
2 x  2 
2 y  5 
2 z  8 

從提到的問題利用參考答案(選擇在點列中的最小值的ID,並以遊戲分組),我們得到

id game point  
1 x  1 
1 z  1 
2 x  2 

的問題是如何爲每個ID獲取單個輸出的答案。兩個輸出

id game point  
1 x  1 
2 x  2 

id game point  
1 z  1 
2 x  2 

是可接受的。

回答

4

使用row_number()

select t.* 
from (select t.*, 
      row_number() over (partition by id order by point asc) as seqnum 
     from t 
    ) t 
where seqnum = 1; 
+0

謝謝!精彩。這對我來說是一個發現。 –

+0

如果我有一個額外的字段,我想通過...進行分區如果是例證,'孝'。除了'cast cast(id as varchar(MAX))+ cast(filial as varchar(MAX))'以外,有沒有更優雅的解決方案? –

+0

@VadimShkaberda。 。 。 '按ID分區,按孝順排序。 。 。 '。 –

-1

我們假設所有的條目指向是不同的(每個ID和它的遊戲,所以我們可以得到最小的每個ID與它的遊戲),使用子查詢和內連接有兩個條件會給你結果你,等待。如果它不與你合作,我得到了另一種解決方案:

SELECT yt.*,  
FROM Yourtable yt INNER JOIN 
    (
     SELECT ID, MIN(point) MinPoint 
     FROM Yourtable 
     GROUP BY ID 
    ) t ON yt.ID = t.ID AND yt.Record_Date = yt.MinDate 
相關問題