如标题所示,我想选择以分组的每组行的第一行和最后一行GROUP BY。
GROUP BY
我在此表中包含以下数据:
id group val start end 1 10 36 465 89 2 10 35 55 11 3 10 34 20 456 4 20 38 1140 1177 5 20 22 566 788 6 20 1235 789 4796 7 20 7894 741 1067
我需要获取的是列开头的第一个值和列末尾的最后一个值,并按group by group列进行分组。
结果表应如下所示:
id group val start end 1 10 36 465 89 3 10 34 20 456 4 20 38 1140 1177 7 20 7894 741 1067
我使用FIRST_VALUE和LAST_VALUE和进行了查询over (partition by)。它可以在SQL Server 2012中使用,但不能在SQL Server 2008中使用。我需要一个可以在SQL Server 2008中执行的查询。
FIRST_VALUE
LAST_VALUE
over (partition by)
如何使用ROW_NUMBER:
ROW_NUMBER
SQL小提琴
WITH Cte AS( SELECT *, RnAsc = ROW_NUMBER() OVER(PARTITION BY [group] ORDER BY val), RnDesc = ROW_NUMBER() OVER(PARTITION BY [group] ORDER BY val DESC) FROM tbl ) SELECT id, [group], val, start, [end] FROM Cte WHERE RnAsc = 1 OR RnDesc = 1 ORDER BY [group], val