SQL Server首先从每个组的条件中选择,最后一个

时间:2017-05-31 15:20:58

标签: sql-server select

我有一个SQL Server查询,它连接多个表并从不同的表中检索列。

我需要返回每组的第一个和最后一个记录......

  • ID为1的第一个和最后一个记录
  • ID为2的第一张和最后一张记录
  • ID为3的第一张和最后一张记录
  • ID为4的第一张和最后一张记录

数据

ID      Name    Number  Enabled     Date
-----------------------------------------------
1       AAA     1234    true        12/10/2016
1       BBB     2222    true        12/10/2016
1       CCC     3333    true        12/10/2016
1       DDD     4444    true        12/10/2016
2       EEE     3453    true        12/10/2016
2       FFF     4453    true        12/10/2016
2       GGG     5222    true        12/10/2016
2       HHH     6344    true        12/10/2016
3       WWW     3453    true        12/10/2016
3       DDD     6453    true        12/10/2016
3       MMM     7222    true        12/10/2016
3       GGG     8344    true        12/10/2016

它有ORDER BY ID和数字

1 个答案:

答案 0 :(得分:1)

您可以像这样使用ROW_NUMBER

;WITH temp AS
(
    SELECT *,
            Row_number() over(PARTITION BY ID ORDER BY Number) AS RnAsc,
            Row_number() over(PARTITION BY ID ORDER BY Number Desc) AS RnDesc
    FROM @SampleData sd 
)
SELECT * 
FROM temp t
WHERE t.RnAsc = 1  -- first row
      OR t.RnDesc = 1 -- last row