如何从最少值的几行中选择一行

时间:2016-07-19 11:27:04

标签: sql sql-server

基于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 

是可以接受的。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:-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