如何找到两列之间的值并将它们与其他列进行比较?

how to find values between two columns and compare them to others?

美好的一天,

我有以下 table:

我想知道如何计算每个预订 ID 的重叠预订。结果应如下所示:

例如预订 ID 1 从第 2 天到第 5 天,因此与预订 ID 2 和预订 ID 5 重叠。

我想包括一些我已经尝试过的东西,但它们相距甚远,甚至离正确还差得很远。

您可以使用自 LEFT 连接和聚合:

SELECT r1.id, COUNT(r2.id) count
FROM reservations r1 LEFT JOIN reservations r2
ON r2.id <> r1.id AND r2.beginning_day <= r1.ending_day AND r2.ending_day >= r1.beginning_day
GROUP BY r1.id;

或者,使用相关子查询更简单:

SELECT r1.id,
       (
         SELECT COUNT(*) 
         FROM reservations r2 
         WHERE r2.id <> r1.id
           AND r2.beginning_day <= r1.ending_day AND r2.ending_day >= r1.beginning_day
       ) count
FROM reservations r1;

参见demo