【问题标题】:get time series in 8 hours of interval以 8 小时的间隔获取时间序列
【发布时间】:2022-01-16 20:01:55
【问题描述】:

我正在使用以下查询生成一个时间序列。

SELECT * from (
    select * from generate_series(
        date_trunc('hour', '2021-11-13 10:01:38'::timestamp),
        '2021-12-13 10:01:38'::timestamp,
        concat(480, ' minutes')::interval) as t(time_ent)) as t
    where t."time_ent" between '2021-11-13 10:01:38'::timestamp and '2021-12-13 10:01:38'::timestamp

它会给我如下输出。

2021-11-13 18:00:00.000
2021-11-14 02:00:00.000
2021-11-14 10:00:00.000
2021-11-14 18:00:00.000
2021-11-15 02:00:00.000

但我需要类似的输出。

2021-11-13 16:00:00.000
2021-11-14 00:00:00.000
2021-11-14 08:00:00.000
2021-11-14 16:00:00.000
2021-11-15 00:00:00.000

目前,时间序列小时数取决于我通过的时间戳。在上面它给了我像02,10,18这样的小时......但我想要像00,08,16这样的小时......小时不应该取决于我通过查询的时间。我尝试了很多东西,但都没有成功。

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    由于您的 generate_series 开始时间设置为 10:00:00,因此您的下一步将是 18:00:00 您必须从 00:00:00(演员表至今)开始您的系列赛,例如:

    SELECT 
    time_ent::timestamp without time zone
    from (
        select * from generate_series(
            date_trunc('hour', '2021-11-13 10:01:38'::date),
            '2021-12-13 10:01:38'::timestamp ,
            concat(480, ' minutes')::interval) as t(time_ent)
            ) as t
        where t."time_ent" between '2021-11-13 10:01:38'::timestamp   and '2021-12-13 10:01:38'::timestamp 
        
    

    结果将是:

    2021-11-13 16:00:00.000
    2021-11-14 00:00:00.000
    2021-11-14 08:00:00.000
    2021-11-14 16:00:00.000
    2021-11-15 00:00:00.000
    2021-11-15 08:00:00.000
    

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 2022-01-17
      • 1970-01-01
      • 2018-02-28
      • 2020-01-31
      • 2022-08-03
      • 2020-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多