【发布时间】:2020-08-14 19:55:50
【问题描述】:
我需要检测和组合表格中的重叠日期范围,但仅在连续行中,不连续的重叠将被忽略。
CREATE TABLE konto (konto_nummer INTEGER, start_datum DATE, end_datum DATE);
INSERT INTO konto VALUES (1, '2020-01-01 00:00:00.000000', '2020-01-10 00:00:00.000000');
INSERT INTO konto VALUES (1, '2020-01-12 00:00:00.000000', '2020-01-20 00:00:00.000000');
INSERT INTO konto VALUES (2, '2020-01-01 00:00:00.000000', '2020-01-10 00:00:00.000000');
INSERT INTO konto VALUES (2, '2020-01-05 00:00:00.000000', '2020-01-20 00:00:00.000000');
INSERT INTO konto VALUES (2, '2020-01-15 00:00:00.000000', '2020-01-25 00:00:00.000000');
INSERT INTO konto VALUES (2, '2020-02-05 00:00:00.000000', '2020-02-20 00:00:00.000000');
INSERT INTO konto VALUES (3, '2020-01-01 00:00:00.000000', '2020-01-25 00:00:00.000000');
INSERT INTO konto VALUES (4, '2020-04-01 00:00:00.000000', '2020-04-10 00:00:00.000000');
INSERT INTO konto VALUES (4, '2020-04-05 00:00:00.000000', '2020-04-15 00:00:00.000000');
INSERT INTO konto VALUES (4, '2020-04-16 00:00:00.000000', '2020-04-25 00:00:00.000000');
INSERT INTO konto VALUES (4, '2020-04-20 00:00:00.000000', '2020-04-30 00:00:00.000000');
相同颜色的行有连续的重叠。
我尝试了以下
SELECT
ROW_NUMBER () OVER (ORDER BY konto_nummer, start_datum, end_datum) AS RN,
konto_nummer,
start_datum,
end_datum,
MAX(end_datum) OVER (PARTITION BY konto_nummer ORDER BY start_datum, end_datum ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS Previousend_datum
FROM konto;
但它也结合了不连续的重叠。
【问题讨论】:
-
“非连续重叠将被忽略”是什么意思?
-
例如:第 2,3,4 行是连续的,但不是 2 和 6,如果 2 和 6 有重叠,除非 2,3,4,5,6 都重叠,否则不计算在内。
标签: sql postgresql gaps-and-islands