mysql - Mysql Select Query 以查找在两个给定日期之间也部分空闲的项目
问题描述
我需要列出两个给定日期之间的免费物品。我在 A 表中有物品,在 B 表中有它们的入住情况。当我在两个日期之间搜索免费项目时,我还需要列出部分免费的项目。
Tabel A:
| ID | ITEM_NAME |
| -------- | -------------- |
| 1 | Item1 |
| 2 | Item2 |
| 3 | Item3 |
Table B:
|id_item |occupancy_start_date |occupancy_end_date|
|---------------------------------------------------------|
|1 |2021-07-24 |2021-08-06 |
|2 |2021-07-24 |2021-07-31 |
|3 |2021-07-29 |2021-08-03 |
当我在 2021-07-24 和 2021-08-06 之间搜索免费项目时,我必须得到 Item2 和 Item3。
Item2 is free from 2021-08-01 till 2021-08-06
Item3 is free from 2021-07-24 till 2021-07-29
Item3 is free from 2021-08-04 till 2021-08-06
(实际上我必须在用户给定的两个给定日期之间找到空闲的日期时段)
你们能帮帮我吗?谢谢你。
解决方案
这是另一个起点(使用其他人慷慨提供的小提琴 - 推到更新的版本)......如果没有人打败我,我将在下周发布更完整的答案......
WITH RECURSIVE cte AS (
SELECT '2021-07-24' dt
UNION ALL
SELECT dt + INTERVAL 1 DAY
FROM cte
WHERE dt < '2021-08-06')
SELECT x.dt
, a.*
FROM cte x
JOIN TableA a
LEFT
JOIN TableB b
ON b.id_item = a.id
AND x.dt BETWEEN b.occupancy_start_date AND b.occupancy_end_date
WHERE b.id_item IS NULL
推荐阅读
- java - 将视图动态添加到自定义 ListView 项目布局不起作用
- python - 用于 matplotlib.pyplot 的 PyCharm 中的 ModuleNotFoundError
- html - 如何使 2 个块“div”连续运行
- c# - 使用 --force 删除应用的迁移
- java - 除非应用程序启动,否则 IntentService 不会在手机重启后自动启动
- python - 如何使用 Python 3 和请求插入 API 分页?
- google-chrome - 如何使铬/铬只重新加载修改后的文件?
- python - 如何将打印功能附加并保存到 excel 或 csv?
- python - 无法安装 pyAudio 包
- node.js - 如何修复收到发布请求的 502 错误?