在SQL Server 2008上,我需要在下表中选择每个人的第一个不同事件:
ID WeeklyAvg MonthlyAvg
1 8 0
1 7 3
2 9 1
2 6 4
2 6 4
.......................
....................
输出应为:
1 8 0
2 9 1
我如何做到这一点?
如果我可以避免将所有'distinct'列放在group by子句中,那就更好了,因为sql server限制了这一点
感谢帮助。
答案 0 :(得分:1)
您可以使用ROW_NUMBER
获取“第一”行:
SELECT ID, WeeklyAvg, MonthlyAvg
FROM
(
SELECT ID, WeeklyAvg, MonthlyAvg,
ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID) RowNum
FROM {table}
) A
WHERE RowNum = 1
请注意,除非您指定特定订单,否则“第一”行将是任意的。