如果SQL具有相同的日期时间间隔,则SQL Query将跳过该行

时间:2017-12-11 14:57:06

标签: sql-server

有人可以帮我从以下的sql查询中获得我想要的结果。

SELECT
    StartTime , EndTime, max(ClinicID) as ClinicID, max([StartDate]) as StartDate, 
    max([EndDate]) as EndDate, max(SlotLength) as SlotLength, max(Capacity) as Capacity
FROM [Oceano].[dbo].[AmsClinicTemplateSection]
where   ClinicID = 'PY2Q'
and  ( [EndDate] is null or [EndDate] > '2017-12-14')
and  ([StartDate] < '2017-12-14')
group by StartTime, EndTime

此查询返回以下结果:

StartTime   EndTime ClinicID    StartDate   EndDate SlotLength  Capacity
1899-12-30 09:00:00.000 1899-12-30 11:20:00.000 PY2Q    2017-07-20 00:00:00.000 NULL    20  1
1899-12-30 09:00:00.000 1899-12-30 11:40:00.000 PY2Q    2017-08-31 00:00:00.000 NULL    20  1
1899-12-30 14:00:00.000 1899-12-30 16:20:00.000 PY2Q    2017-08-31 00:00:00.000 NULL    20  1

前两行的开始和结束时间分别为9.00到11.20和9.00到11.40。我需要保留第二行,因为它也涵盖了第一行的时间。有人可以帮我实现这个目标。

1 个答案:

答案 0 :(得分:0)

这是一个猜测,但在没有Sample数据的情况下,或许可以:

WITH CTE AS(
    SELECT StartTime , EndTime,
           MAX(ClinicID) AS ClinicID,
           MAX([StartDate]) AS StartDate, 
           MAX([EndDate]) AS EndDate,
           MAX(SlotLength) AS SlotLength, MAX(Capacity) AS Capacity,
           ROW_NUMBER() OVER (PARTITION BY StartTime ORDER BY EndTime DESC) AS RN
    FROM [Oceano].[dbo].[AmsClinicTemplateSection]
    WHERE ClinicID = 'PY2Q'
      AND ([EndDate] IS NULL OR [EndDate] > '2017-12-14')
      AND [StartDate] < '2017-12-14'
    GROUP BY StartTime, EndTime)
SELECT *
FROM CTE
WHERE RN = 1;

如果这不起作用,您是否可以使用某些DDL和耗材样本数据编辑您的帖子,以及您的预期结果集。

相关问题