给定两个表:
CREATE TABLE foo (ts timestamp, foo text);
CREATE TABLE bar (ts timestamp, bar text);
Run Code Online (Sandbox Code Playgroud)
我想编写一个查询,对于回报值ts,foo以及bar代表最新的值的统一视图。换句话说,如果foo包含:
ts | foo
--------
1 | A
7 | B
Run Code Online (Sandbox Code Playgroud)
并bar包含:
ts | bar
--------
3 | C
5 | D
9 | E
Run Code Online (Sandbox Code Playgroud)
我想要一个返回的查询:
ts | foo | bar
--------------
1 | A | null
3 | A | C
5 | A | D
7 | B | D
9 | B …Run Code Online (Sandbox Code Playgroud) 这个问题是我之前提出的一个过于简化的问题的扩展。更准确的示例在此 SQLFiddle中演示,我演示了一个有效(但速度较慢)的解决方案,然后尝试将先前的答案调整为实际问题。
实际问题是因为这两个表包含多个时间线的事件。
CREATE TABLE foo (ts int, id text, foo text);
INSERT INTO foo (ts, id, foo)
VALUES
(1, 'A', 'Lorem'),
(1, 'B', 'ipsum'),
(4, 'B', 'dolor'),
(5, 'A', 'sit'),
(8, 'A', 'amet'),
(8, 'B', 'consectetur');
CREATE TABLE bar (ts int, id text, bar text);
INSERT INTO bar (ts, id, bar)
VALUES
(1, 'A', 'adipiscing'),
(5, 'B', 'elit'),
(6, 'A', 'sed'),
(9, 'B', 'do ');
Run Code Online (Sandbox Code Playgroud)
每个表都有时间线“A”和“B”的事件。目标是将结果组合成单个结果集,显示每个时间线的“状态”。两条时间线是正交的。
ts id foo 栏 1 Lorem adipiscing …