一尘不染

如何在SQL Server 2008中获取每个组的第一条记录和最后一条记录?

sql

如标题所示,我想选择以分组的每组行的第一行和最后一行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_VALUELAST_VALUE和进行了查询over (partition by)。它可以在SQL Server
2012中使用,但不能在SQL Server 2008中使用。我需要一个可以在SQL Server 2008中执行的查询。


阅读 443

收藏
2021-03-10

共1个答案

一尘不染

如何使用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
2021-03-10