每种类型的单位记录

时间:2013-11-12 17:35:38

标签: sql sql-server

在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限制了这一点 感谢帮助。

1 个答案:

答案 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

请注意,除非您指定特定订单,否则“第一”行将是任意的。