如何在日期时间列上连接 postgresql 中的两个表,并在一个列中显示所有日期时间寄存器?

爱德华多

我有两个表:

TABLE_MACHINE_1

datetime,            sensor_1
2017-10-01 21:00:00, 1.18047
2017-10-01 21:15:00, 1.18023
2017-10-01 21:30:00, 1.18059
2017-10-01 21:45:00, 1.18067
2017-10-01 22:00:00, 1.18056
2017-10-01 22:15:00, 1.18147
2017-10-01 22:30:00, 1.18104
2017-10-01 22:45:00, 1.18111
2017-10-01 23:00:00, 1.18103
2017-10-01 23:15:00, 1.18072
2017-10-01 23:30:00, 1.18083
2017-10-01 23:45:00, 1.18079
2017-10-02 00:00:00, 1.17996
2017-10-02 00:15:00, 1.17987
2017-10-02 00:30:00, 1.17968
2017-10-02 00:45:00, 1.17893
2017-10-02 01:00:00, 1.17852
2017-10-02 01:15:00, 1.17833

TABLE_MACHINE_2

datetime,            sensor_2
2017-10-01 21:45:00, 112.1
2017-10-01 22:00:00, 133.2
2017-10-01 22:15:00, 143.5
2017-10-01 22:30:00, 154.9
2017-10-01 22:45:00, 166.1
2017-10-01 23:30:00, 123.1
2017-10-01 23:45:00, 134.1
2017-10-02 00:00:00, 188.3
2017-10-02 01:00:00, 192.9
2017-10-02 01:15:00, 105.3
2017-10-02 01:30:00, 172.9
2017-10-02 01:45:00, 145.3
2017-10-02 02:00:00, 174.9
2017-10-02 02:15:00, 155.3

我预计结果如何:

加入预期

datetime,            sensor_1  sensor_2
2017-10-01 21:00:00, 1.18047,  NULL
2017-10-01 21:15:00, 1.18023,  NULL
2017-10-01 21:30:00, 1.18059,  NULL
2017-10-01 21:45:00, 1.18067,  112.1
2017-10-01 22:00:00, 1.18056,  133.2
2017-10-01 22:15:00, 1.18147,  143.5
2017-10-01 22:30:00, 1.18104,  154.9
2017-10-01 22:45:00, 1.18111,  166.1
2017-10-01 23:00:00, 1.18103,  NULL
2017-10-01 23:15:00, 1.18072,  NULL
2017-10-01 23:30:00, 1.18083,  123.1
2017-10-01 23:45:00, 1.18079,  134.1
2017-10-02 00:00:00, 1.17996,  188.3
2017-10-02 00:15:00, 1.17987,  105.3
2017-10-02 00:30:00, 1.17968,  NULL
2017-10-02 00:45:00, 1.17893,  NULL
2017-10-02 01:00:00, 1.17852,  NULL
2017-10-02 01:15:00, 1.17833,  NULL
2017-10-02 01:30:00, NULL   ,  172.9
2017-10-02 01:45:00, NULL   ,  145.3
2017-10-02 02:00:00, NULL   ,  174.9
2017-10-02 02:15:00, NULL   ,  155.3

但如果我做 FULL OUTER JOIN 得到:

从 TABLE_MACHINE_1 FULL OUTER JOIN TABLE_MACHINE_2 ON DATETIME

datetime,            sensor_1, datetime,            sensor_2
2017-10-01 21:00:00, 1.18047,  NULL,                NULL  
2017-10-01 21:15:00, 1.18023,  NULL,                NULL 
2017-10-01 21:30:00, 1.18059,  NULL,                NULL 
2017-10-01 21:45:00, 1.18067,  2017-10-01 21:45:00, 112.1
2017-10-01 22:00:00, 1.18056,  2017-10-01 22:00:00, 133.2
2017-10-01 22:15:00, 1.18147,  2017-10-01 22:15:00, 143.5
2017-10-01 22:30:00, 1.18104,  2017-10-01 22:30:00, 154.9
2017-10-01 22:45:00, 1.18111,  2017-10-01 22:45:00, 166.1
2017-10-01 23:00:00, 1.18103,  NULL,                NULL 
2017-10-01 23:15:00, 1.18072,  NULL,                NULL 
2017-10-01 23:30:00, 1.18083,  2017-10-01 23:30:00, 123.1
2017-10-01 23:45:00, 1.18079,  2017-10-01 23:45:00, 134.1
2017-10-02 00:00:00, 1.17996,  2017-10-02 00:00:00, 188.3
2017-10-02 00:15:00, 1.17987,  NULL,                NULL 
2017-10-02 00:30:00, 1.17968,  NULL,                NULL 
2017-10-02 00:45:00, 1.17893,  NULL,                NULL 
2017-10-02 01:00:00, 1.17852,  2017-10-02 01:00:00, 192.9
2017-10-02 01:15:00, 1.17833,  2017-10-02 01:15:00, 105.3
NULL,                NULL,     2017-10-02 01:30:00, 172.9 
NULL,                NULL,     2017-10-02 01:45:00, 145.3
NULL,                NULL,     2017-10-02 02:00:00, 174.9 
NULL,                NULL,     2017-10-02 02:15:00, 155.3

我需要在 postgresql 中的一个查询中解决它,我尝试使用完整的外连接子句失败。

我已经考虑过以下解决方案,但我无法实现它,因为当我传递变量“generate_series”时出现错误:

  1. 创建一个变量来存储每个表的最大天数。

      datetime_end := to_char(now()::date,'YYY-MM-DD');
    
  2. 将变量传递给以下查询:

      SELECT generate_series(
          timestamp without time zone '2017-10-01',
          timestamp without time zone datetime_end,
          '15 minute');
    
    1. 对两个表做LEFT JOIN之前的查询。

提前致谢。

詹尼斯

从 TABLE_MACHINE_1 FULL OUTER JOIN TABLE_MACHINE_2 ON DATETIME

那不是有效的 SQL。

如果您使用USING而不是 进行连接ON,那么它将自动合并列。

select 
    datetime,
    t1.sensor_1,
    t2.sensor_2
from table_machine_1 t1
full outer join table_machine_2 t2 
    USING (datetime)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在postgresql中与特定ID相关的两个日期时间之间选择数据

将两列(类型日期和类型字符串)连接到 PostgreSQL 中同一个表中的另一列(类型时间戳)

PostgreSQL:如何使用两个日期之间的时间联接两个表?

如何在PostgreSQL中设置两列之间带有日期和时间的间隔?

如何在 PostgreSQL 中连接两个表?

如何在postgresql中以日期格式转换unix时间戳?

在 PostgreSQL 中连接具有两个条件或两个共同列的表

当其中一个只缺少一列时,如何在 postgresql 中合并两个表?

通过另一个表 postgresql 连接两个表中的数据

Postgresql 如何计算两个日期取决于另一个表

如何链接两个表,但仅从PostgreSQL中的一个表获取MAX值?

在PostgreSQL中生成两个日期之间的时间序列

如何在 PostgreSQL 中获取连接时间戳的 EPOCH

如何在 C# 中使用 csvHelper 将两个单独列中的日期和时间合并到一个新的日期时间列中

如何在Postgresql中创建具有固定日期+随机时间间隔的复合日期时间

Postgresql如何对同一个表中的两个选择使用联合?

PostgreSQL如何在内部存储日期时间类型

如何在两个hstore postgresql中连接值?

如何在python和wrt中截断日期时间的时间到postgresql?

postgresql 在连接查询中按日期时间分组

Postgresql:如何找到两个日期和时间之间的十进制小时之间的差异?

如何在 PostgreSQL 的时间戳上优化此连接

如何在mongodb中减去两个日期时间

PostgreSQL显示最新日期和许多列中的一个值

从表中请求两个日期时间,但仅获得一个

PostgreSQL中两个日期之间的差异

如何连接 2 个表并在 PostgreSQL 的第一个表中嵌套其他表的值列表?

在 POSTGRESQL 中编写一个 Select 查询以将空值替换为当前日期时间戳,计算两列之间的差异并将具有相同 ID 的它们相加

如何在PostgreSQL的jdbc中设置“ 5天”(日期时间间隔)?