如何找到两列之间的值并将它们与其他列进行比较?
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。
美好的一天,
我有以下 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。