如何根据时间戳匹配值,当时间戳不存在时,该值是前一个时间戳的值

Posted

技术标签:

【中文标题】如何根据时间戳匹配值,当时间戳不存在时,该值是前一个时间戳的值【英文标题】:How to match Values based on time stamps and when time stamp does not exist the value is the previous time stamp's value 【发布时间】:2019-12-12 16:22:13 【问题描述】:

我正在尝试生成一个报告,该报告将根据创建的时间序列加入一个表,该时间序列以 1 分钟为间隔,每天总共 1440 行。

我想将每个间隔与另一个表上的时间戳连接起来,但当该时间戳在表中不存在时,该值来自上一个时间戳

Generated_TIME_STAMP | TIMESTAMP             | VALUE
12/01/2019 00:01:000 | 12/01/2019 00:01:000  | 1
12/01/2019 00:02:000 | NULL                  | 1
12/01/2019 00:03:000 | 12/01/2019 00:03:000  | 3
12/01/2019 00:04:000 | 12/01/2019 00:04:000  | 7
12/01/2019 00:03:000 | NULL                  | 7

因此,生成一个时间序列,将该时间序列与表的时间戳连接以识别这些时间戳的值,当表中不存在时间戳时,值列会从确实存在的上一个时间戳中获取值.

【问题讨论】:

您当前的查询是什么? 【参考方案1】:

您可以使用generate_series() 生成行。然后,您可以使用横向 join 获取该行:

select ts.ts,
       (case when t.timestamp = ts.ts then t.timestamp end) as timestamp,
       t.value
from generate_series('2019-12-01'::timestamp, '2019-12-01 23:59:00'::timestamp, interval '1 minute') ts(ts) left join lateral
     (select t.*
      from yourtable t
      where t.timestamp <= ts.ts
      order by t.timestamp desc
      limit 1
     ) t;

【讨论】:

以上是关于如何根据时间戳匹配值,当时间戳不存在时,该值是前一个时间戳的值的主要内容,如果未能解决你的问题,请参考以下文章

蜂巢时间戳不接受 Spark 时间戳类型

如果时间戳不存在,有没有办法将秒添加到时间戳中?

在数据透视表中附加数据时时间戳不更新

以秒为单位的转换时间戳值不会反转为 python 中的原始时间戳

不同时区转换时间戳

PHP/mysql - 我的时间戳不喜欢在大于 (>) 语句中