我想选择具有以下条件的所有条目:下一行的开始日期应该是前一行的结束日期的少于1个月即(Startdate(第i行)< Enddate(第i-1行))对于相同的' GpID'和'客户ID'。
例如,在下面的屏幕截图中,包含[ClientGPID] = 2
的行无效,因为Startdate
行[ClientGPID] = 2
为> END date
行,[ClientGPID] = 1
为GPID = 67
CREATE TABLE [Client_GP]
(
[ClientGPID] [int] IDENTITY(1,1) NOT NULL,
[ClientID] [int] NOT NULL,
[GpID] [int] NOT NULL,
[Startdate] [datetime] NOT NULL,
[Enddate] [datetime] NULL
)
GO
INSERT INTO [Client_GP]
VALUES (67, 812, '2016-01-28 16:49:28.000', '2016-01-28 17:52:01.000');
INSERT INTO [Client_GP]
VALUES(67, 812, '2017-02-24 16:49:28.000', '2017-02-24 17:52:01.000');
INSERT INTO [Client_GP]
VALUES(67, 812, '2017-02-24 17:52:06.000', NULL);
答案 0 :(得分:0)
在您提供的示例数据中(只有三行),没有一行是有效的。第一行没有前导,第二行无效,因为它的StartDate
值高于前一行的EndDate
值,第三行也是如此(尽管是5秒)
同样,我认为这可能会对你有所帮助:
;WITH CTE AS
(
SELECT
*
,LAG(EndDate) OVER (ORDER BY ClientGPID) AS X
FROM Client_GP
)
SELECT
ClientGPID
,ClientID
,GpID
,Startdate
,Enddate
FROM CTE
WHERE StartDate < X
;
播放了一些示例数据,并按预期执行。
我在你的问题中唯一没有理解的是这一部分:
下一行的开始日期应该是少于1个月的结束日期 前一行
你的意思是“不到一个月”?
如果因为这个问题我的回答不合适,请告诉我你的意思,以便我给你一个完整的答案。