Sql 选择用于预订约会的可用时间段的ID

Sql 选择用于预订约会的可用时间段的ID,sql,timeslots,Sql,Timeslots,我有一张名为“预约”的表格,上面显示了预约的时间段 id | time start | time end | caseno 1 | 800 | 830 | null 2 | 800 | 830 | null 3 | 900 | 930 | AB-111 4 | 900 | 930 | null 我需要显示CaseNo为空的可用约会时段。但是,每次都有两个可用的时隙(8am、830am、900

我有一张名为“预约”的表格,上面显示了预约的时间段

id | time start | time end | caseno
1  |  800       | 830      | null
2  |  800       | 830      | null
3  |  900       | 930      | AB-111
4  |  900       | 930      | null
我需要显示
CaseNo
为空的可用约会时段。但是,每次都有两个可用的时隙(8am、830am、900am等)


我应该使用什么查询来显示列:
Apn\u Id
Apn\u TimeStart
Apn\u TimeEnd
避免显示重复项,只使用可用的时隙(
caseno=null
)?

您可以这样做:

SELECT MIN(id) as id,time_start,time_end
FROM Appointments 
GROUP BY time_start,time_end
HAVING SUM(CASE WHEN caseno IS NOT NULL THEN 1 ELSE 0 END) = 0
说明:

have
子句仅用于占用可用的时隙(
case=null

MIN
用于
分组依据
(以避免重复)

结果:

id  time_start  time_end
------------------------
1   800         830

示例结果。

如果要查找
NULL
的约会,可以使用
HAVING
子句。如果希望所有插槽都为
NULL
,请使用:

HAVING COUNT(caseno) = 0
HAVING COUNT(caseno) < COUNT(*)
如果希望任何插槽为“NULL”,请使用:

HAVING COUNT(caseno) = 0
HAVING COUNT(caseno) < COUNT(*)
有计数(caseno)

请记住:
COUNT()?预期的结果是什么?您可以向我们展示您当前的查询吗?对于您问题中的数据示例,您正在寻找的预期结果是什么?查询是否包含开始时间和结束时间?请证明您已经尝试了一些方法。