【发布时间】:2020-01-27 20:27:29
【问题描述】:
我有一个支票账户表,其中包含 Cust_id(客户 ID)、Open_Date(开始日期)和 Closed_Date(结束日期)列。每个帐户有一行。客户可以在任何给定时间开设多个账户。我想知道此人成为客户多久了。
例如1:
CREATE TABLE [Cust]
(
[Cust_id] [varchar](10) NULL,
[Open_Date] [date] NULL,
[Closed_Date] [date] NULL
)
insert into [Cust] values ('a123', '10/01/2019', '10/15/2019')
insert into [Cust] values ('a123', '10/12/2019', '11/01/2019')
理想情况下,我想将其插入只有一行的表中,表示此人从 2019 年 10 月 1 日到 2019 年 1 月 1 日一直是客户。 (因为他在关闭前一个帐户之前开设了第二个帐户。
类似如 2:
insert into [Cust] values ('b245', '07/01/2019', '09/15/2019')
insert into [Cust] values ('b245', '10/12/2019', '12/01/2019')
我希望在这种情况下看到 2 行 - 一行显示他是 07/01 到 09/15 的客户,然后是 10/12 到 12/01 的客户。
你能告诉我最好的方法吗?
【问题讨论】:
-
你有没有看过差距和孤岛问题?你累了什么?
标签: sql sql-server tsql window-functions gaps-and-islands