【发布时间】:2021-05-09 08:11:11
【问题描述】:
我想找个有空的办公室。
例如,我租了一辆车,我想知道办公室在接送时间开放。
我想查找在open_time 之后和end_time 之前开放的办公室。
办公桌;
+---+-----------+
|id |office_name|
+---+-----------+
|116| AAAAA |
|117| BBBBB |
|118| CCCCC |
|119| DDDDD |
|120| EEEEE |
|121| FFFFF |
|122| GGGGG |
+---+-----------+
工作时间表;
+----+---------+-----------+---------+----------+
|id |office_id|day_of_week|open_time|close_time|
|1325|116 |4 |09:00:00 |12:00:00 | <- 116 has 1 break (available)
|1326|116 |4 |13:00:00 |18:00:00 |
|1327|117 |4 |09:00:00 |18:00:00 | <- 117 has no break (available)
|1328|118 |4 |09:00:00 |12:00:00 | <- 118 has 3 break (available)
|1329|118 |4 |13:00:00 |15:00:00 |
|1330|118 |4 |17:00:00 |20:00:00 |
|1331|119 |4 |09:00:00 |13:30:00 | <- not available
|1332|220 |4 |15:00:00 |17:30:00 | <- not available
|1332|221 |4 |06:00:00 |17:30:00 | <- not available
|1332|222 |4 |09:00:00 |17:30:00 | <- 222 has no break (available)
+----+------------------+-----------+-----------+
当办公室有1 workhour 行时,我可以去办公室,但我无法查询
如果办公室的工作时间范围超过1。
SELECT supplier_offices.id as office_id,
supplier_offices.supplier_id as supplier_id,
supplier_offices.name as supplier_office_label,
FROM "supplier_offices"
INNER JOIN office_locations on supplier_offices.id = office_locations.supplier_office_id
INNER JOIN supplier_office_work_hours as wh on supplier_offices.id = wh.supplier_office_id
AND (supplier_offices.status = true)
AND ("office_locations"."location_id" IN (3027))
AND (wh.day_of_week = 4)
AND (wh.open_time <= '09:01'::time)
AND ('14:00'::time <= wh.close_time)
我明白了:
+---+-----------+
|id |office_name|
+---+-----------+
|119| DDDDD | <- 119 has no break
+---+-----------+
预期:
所有办公室都可以在09:01 - 14:00 之间使用
+---+-----------+
|id |office_name|
+---+-----------+
|116| AAAAA |
|117| BBBBB |
|118| CCCCC |
|122| GGGGG |
+---+-----------+
【问题讨论】:
-
您有一张表的样本数据,但您的查询引用了两张。
-
@GordonLinoff 我添加了有关我的问题的更多信息。
标签: sql postgresql datetime join time