首页 > 解决方案 > 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

(实际上我必须在用户给定的两个给定日期之间找到空闲的日期时段)

你们能帮帮我吗?谢谢你。

标签: mysqldateselect

解决方案


这是另一个起点(使用其他人慷慨提供的小提琴 - 推到更新的版本)......如果没有人打败我,我将在下周发布更完整的答案......

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

推荐阅读