有人可以帮我从以下的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。我需要保留第二行,因为它也涵盖了第一行的时间。有人可以帮我实现这个目标。
答案 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和耗材样本数据编辑您的帖子,以及您的预期结果集。