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
我需要一些帮助来汇总一些数据。假设我有以下 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