SQL 服务器:按序号聚合

SQL Server : aggregate by sequenced number

我需要一些帮助来汇总一些数据。假设我有以下 table:

number  Name    From Date   To Date     Sequency No_
----------------------------------------------------
123440  MJCL    03/12/2014  02/09/2015  1
123440  MJCL    07/09/2015  06/03/2016  1
123440  MJCL    07/03/2016  06/09/2016  2
123440  MJCL    07/09/2016  06/03/2017  3
123440  MJCL    07/03/2017  31/12/9999  4
123442  GJSVF   15/12/2014  14/06/2015  1
123442  GJSVF   15/06/2015  14/12/2015  2
123442  GJSVF   15/12/2015  14/06/2016  3
123442  GJSVF   27/03/2017  26/03/2018  1

我需要一个 SQL 查询来输出以下内容:

number  Name    From Date   To Date
--------------------------------------
123440  MJCL    03/12/2014  02/09/2015
123440  MJCL    07/09/2015  31/12/9999
123442  GJSVF   15/12/2014  14/06/2016
123442  GJSVF   27/03/2017  26/03/2018

基本上我需要的是通过 [Sequency No_] 和 return 加入行 [Sequency No_] = 1[From Date] 和最后 [=13] 的 [To Date] =] 的序列。有什么想法吗?

请注意,数据库是 SQL Server 2008。

这被称为gaps and islands问题。

这是使用 Row_Number window 函数的一个技巧

;WITH cte
     AS (SELECT *,
                Grp = Row_number()OVER(partition BY number ORDER BY [From Date],[Sequency No_]) - [Sequency No_]
         FROM   Yourtable)
SELECT number,
       NAME,
       [From Date] = Min([From Date]),
       [To Date] = Max([To Date])
FROM   cte
GROUP  BY number,
          NAME,
          Grp 

试试这个..这对你有用:)

SELECT number,Name,MAX(From_Date) From_Date,MAX(To_Date) To_Date
FROM   Trans_Tab
GROUP BY number,Name

UNION ALL

SELECT number,Name,MIN(From_Date) From_Date,MIN(To_Date) To_Date
FROM   Trans_Tab
GROUP BY number,Name
ORDER BY number,Name