我的表名为availablebleslots。它包含2列
1.WorkerId (int)
2.StartDate (DateTime)
StartDate包含所有工作人员的可用性。
现在我需要一个选择n个持续时隙的查询...比如
WorkerId StartDate
1 31/01/2018 09:00
1 31/01/2018 10:00
2 31/01/2018 09:00
3 31/01/2018 09:00
3 31/01/2018 10:00
4 31/01/2018 09:00
根据此数据,只有工人1和3有2个可用的连续插槽。 我将这些插槽作为参数传递。
我正在使用MSSQL。
注意: - 我将时隙作为参数传递,并且不是固定的。它可能从2到n不等......
答案 0 :(得分:3)
这是你需要的吗?
SELECT WorkerID, count(StartDate)
from Availableslots
where
StartDate in (date, date)
group by WorkerID
having count(StartDate) = 2 (or > 2, how you need)
答案 1 :(得分:0)
我认为首先应该用适当的例子来定义什么是连续的插槽,什么不是连续的插槽。
declare @t table(WorkerId int,StartDate datetime)
insert into @t VALUES
(1, '2018/01/31 09:00')
,(1,'2018/01/31 10:00')
,(2,'2018/01/31 09:00')
,(3,'2018/01/31 09:00')
,(3,'2018/01/31 10:00')
,(4,'2018/01/31 09:00')
declare @timeSlot int=2
;
WITH CTE
AS (
SELECT *
,ROW_NUMBER() OVER (
PARTITION BY workerid ORDER BY StartDate
) rn
FROM @t
)
SELECT *
FROM @t t
WHERE EXISTS (
SELECT 1
FROM cte c
WHERE c.workerid = t.workerid
AND c.rn >=@timeSlot --( how you need)
)