给定两个表:
CREATE TABLE foo (ts timestamp, foo text);
CREATE TABLE bar (ts timestamp, bar text);
我想编写一个查询,对于回报值ts
,foo
以及bar
代表最新的值的统一视图。换句话说,如果foo
包含:
ts | foo
--------
1 | A
7 | B
并bar
包含:
ts | bar
--------
3 | C
5 | D
9 | E
我想要一个返回的查询:
ts | foo | bar
--------------
1 | A | null
3 | A | C
5 | A | D
7 | B | D
9 | B | E
如果两个表同时具有一个事件,则顺序无关紧要。
我已经能够使用union all和dummy值创建所需的结构:
SELECT ts, foo, null as bar FROM foo
UNION ALL SELECT ts, null as foo, bar FROM bar
这将为我提供新值的线性时间线,但是我不太能够确定如何根据前几行填充空值。我已经试过了lag
window函数,但AFAICT只会看前一行,而不会递归地向后看。我研究了递归CTE,但是我不确定如何设置开始条件和终止条件。
为了节省其他人的麻烦,sqlfiddle.com /#!15/511414
—
Craig Ringer
给出答案后,不要改变问题的性质,而要提出一个新问题。您可以随时链接到此参考。(如果有答案,您甚至可以提供自己的答案。)原始版本对于公众应该是有趣的。让我们在一个问题中不要太多。
—
Erwin Brandstetter
对不起,超载。我删除了后续步骤,并将其添加为新问题。
—
Christopher Currie
foo
而bar
严格上升,还是测试用例在这方面具有误导性?