【发布时间】:2020-03-07 13:51:36
【问题描述】:
有两个表:
Table1(id, param1, param2, date_from, date_to):
(1, 'z', 55, '01.05.2010 12:30:20', '17.05.2010 13:10:14'),
(1, 'c', null, '17.05.2010 13:10:15', '18.01.2010 04:13:15'),
(1, 'c', 25, '18.01.2010 04:13:16', '01.01.9999 00:00:00');
Table2(id, param3, date_from, date_to):
(1, 15, '01.04.2010 12:30:20', '02.05.2010 13:10:14'),
(1, 35, '02.05.2010 13:10:15', '01.01.9999 00:00:00');
在合并2个表时,必须有字段包含每个参数的更改历史。那就是:
选择(id,param1,param2,param3,date_from,date_to):
(1, null, null, 10, '01.04.2010 12:30:20', '01.05.2010 12:30:19'),
(1, 'z', 55, 15, '01.05.2010 12:30:20', '02.05.2010 13:10:14'),
(1, 'z', 55, 35, '02.05.2010 13:10:15', '17.05.2010 13:10:14'),
(1, 'c', null, 35, '17.05.2010 13:10:15', '18.01.2010 04:13:15'),
(1, 'c', 25, 35, '18.01.2010 04:13:16', '01.01.9999 00:00:00');
如果两个表中的记录在时间上(或部分时间)不重叠,则应输出 null。
到目前为止我已经完成了:
SELECT a.id, param1, param2, param3, a.dfrom as afrom, a.dto as ato, b.dfrom as bfrom, b.dto as bto
FROM Table1 a LEFT JOIN Table2 b ON a.id = b.id
UNION
SELECT id, null as param1, null as param2, param3, null as afrom, null as bfrom, dfrom, dto
FROM Table2
然后我不明白该怎么做……
【问题讨论】:
-
在第一个结果行中,不应该是
15而不是10吗? -
@Sergey 。 . .我建议你设置一个 dbfiddle 的某种形式。
-
向大家解释你想要什么。例如:这个日期值来自哪里:“01.05.2010 12:30:19”?
标签: sql database postgresql