[英]get time series in even numbers of hours instead of odd numbers of hours
我正在使用以下查询生成一个时间序列。
SELECT date_trunc('hour', dd):: TIMESTAMP WITHOUT TIME zone as time_ent
FROM generate_series ( '2021-12-02 11:49:26'::timestamp
, '2021-12-09 11:49:26'::timestamp
, '120 min'::interval) dd
它会给我 output 如下所示。
2021-12-02 11:00:00.000
2021-12-02 13:00:00.000
2021-12-02 15:00:00.000
2021-12-02 17:00:00.000
2021-12-02 19:00:00.000
但我需要 output 之类的。
2021-12-02 12:00:00.000
2021-12-02 14:00:00.000
2021-12-02 16:00:00.000
2021-12-02 18:00:00.000
2021-12-02 20:00:00.000
目前,时间序列小时数取决于我通过的时间戳。 在上面它给了我像 11,13,15 这样的奇数小时......但我希望在任何情况下像 12,14,16 这样的偶数小时......它不应该取决于我在查询中传递的时间' 2021-12-02 11:49:26'::timestamp, '2021-12-09 11:49:26'::timestamp
这是根据 Tilen 的评论的解决方案。
SELECT date_trunc('hour', dd):: TIMESTAMP WITHOUT TIME zone as time_ent
FROM generate_series (
CASE
WHEN MOD(EXTRACT(HOUR FROM '2021-12-02 11:49:26'::timestamp)::INT, 2) = 0 THEN
'2021-12-02 11:49:26'::timestamp
ELSE
'2021-12-02 11:49:26'::timestamp + INTERVAL '1 hour'
END
, '2021-12-09 11:49:26'::timestamp
, '120 min'::INTERVAL
) dd
SELECT date_trunc('hour', dd):: TIMESTAMP WITHOUT TIME zone as time_ent
FROM generate_series ( timestamp '2021-12-02 11:49:26' + ((DATE_PART('hour', timestamp '2021-12-02 11:49:26')::integer % 2) || ' hours') :: INTERVAL
, '2021-12-03 11:49:26'::timestamp
, '120 min'::interval) dd
https://dbfiddle.uk/?rdbms=postgres_12&fiddle=6b220fdb1d30c10ca17e8ce07333f5ce
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.