如何在SQL Server 2008中获取每个组的第一条记录和最后一条记录?
如标题所示,我想选择以分组的每组行的第一行和最后一行GROUP BY
。
我在此表中包含以下数据:
id group val start end1 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中执行的查询。
回答:
如何使用ROW_NUMBER
:
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
以上是 如何在SQL Server 2008中获取每个组的第一条记录和最后一条记录? 的全部内容, 来源链接: utcz.com/qa/405034.html