如何从表中获取ID,而不提及EndDate

时间:2017-04-04 13:59:07

标签: sql-server-2012

由于错误

,代码被删除

1 个答案:

答案 0 :(得分:1)

更新

创建并填充样本表(在将来的问题中保存此步骤)

DECLARE @T AS TABLE
(
    ID int identity(1,1),
    Name char(1),
    StartDate date,
    EndDate date
)

INSERT INTO @T VALUES
('A', '2016-04-04', '2017-04-03'),
('B', '2016-04-04', NULL),
('C', '2016-04-04', '2017-04-03'),
('D', '2016-04-04', '2017-04-03'),
('E', '2016-04-04', NULL),
('F', '2016-04-04', NULL),
('G', '2016-04-04', '2017-04-03'),
('C', '2017-04-03', NULL),
('A', '2017-04-03', NULL)

查询:

SELECT Name
FROM @T vu1
WHERE EndDate IS NOT NULL
AND NOT EXISTS
(
    SELECT 1
    FROM @T vu2
    WHERE vu2.Name = vu1.Name
    AND vu2.StartDate >= vu1.EndDate
)

结果:

Name
D
G

第一个版本

假设我理解这个问题,这应该可以解决问题:

SELECT Name
FROM View_User vu1
WHERE EndDate IS NOT NULL
AND NOT EXISTS
(
    SELECT 1
    FROM View_User vu2
    WHERE vu2.Name = vu1.Name
    AND vu2.StartDate >= vu1.EndDate
    AND vu2.EndDate IS NOT NULL
)