SQL Server:按序列号聚合

时间:2018-01-02 16:36:51

标签: sql sql-server sql-server-2008 sequence gaps-and-islands

我需要一些帮助来汇总一些数据。想象一下,我有下表:

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_]加入行并返回[From Date]的{​​{1}}和[Sequency No_] = 1来自序列的最后[To Date]。有什么想法吗?

请注意,该数据库是SQL Server 2008.

2 个答案:

答案 0 :(得分:1)

这称为 gaps and islands 问题。

这是使用{'colour': 'green'} [{'colour': 'yellow'}, {'colour': 'green'}] {'colour': 'green'} 窗口函数

的一个技巧
Row_Number

答案 1 :(得分:0)

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

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