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

如标题所示,我想选择以分组的每组行的第一行和最后一行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中执行的查询。

回答:

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

回到顶部