需要sql查询才能从表中获取两个持久性插槽

时间:2018-01-31 09:41:40

标签: sql sql-server tsql

我的表名为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不等......

2 个答案:

答案 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)
        )