选择预约时段的可用时段ID

时间:2015-06-07 09:12:15

标签: 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为空的可用预约空档。但是,每次有两个时间段(早上8点,早上8点30分,上午9点等)。

我使用什么查询来显示列:Apn_IdApn_TimeStartApn_TimeEnd,以避免显示重复项并仅占用可用时段(caseno = null)?

2 个答案:

答案 0 :(得分:1)

你可以这样做:

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

<强>解释

Having子句仅用于获取可用的时间段(case = null)。

MIN适用于GROUP BY(以避免重复)。

结果:

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

SQL Fiddle中的示例结果。

答案 1 :(得分:0)

如果您想查找NULL的约会,可以选择HAVING条款。如果您希望所有广告位为NULL,请使用:

HAVING COUNT(caseno) = 0

如果您希望任何插槽为&#39; NULL`,请使用:

HAVING COUNT(caseno) < COUNT(*)

请记住:COUNT(<column name>)计算列中非NULL值的数量。