小编Chr*_*rie的帖子

将两个事件表合并为一个时间线

给定两个表:

CREATE TABLE foo (ts timestamp, foo text);
CREATE TABLE bar (ts timestamp, bar text);
Run Code Online (Sandbox Code Playgroud)

我想编写一个查询,对于回报值tsfoo以及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)

postgresql join window-functions

12
推荐指数
1
解决办法
2992
查看次数

将多个时间线的两个事件表合并为一个结果集

这个问题是我之前提出的一个过于简化的问题的扩展。更准确的示例在此 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 …

postgresql join window-functions

5
推荐指数
1
解决办法
948
查看次数

标签 统计

join ×2

postgresql ×2

window-functions ×2