简体   繁体   English

获取间隔 4 天的时间序列

[英]get time series in 4 days of interval

I am generating one time-series from using the below query.我正在使用以下查询生成一个时间序列。

SELECT date_trunc('day', dd):: TIMESTAMP WITHOUT TIME zone as time_ent
FROM generate_series (
    CASE
        WHEN MOD(EXTRACT(DAY FROM '2020-12-13 13:02:42'::timestamp)::INT, 4) = 0 THEN
            '2020-12-13 13:02:42'::date
        ELSE
            '2020-12-13 13:02:42'::date + concat(MOD(EXTRACT(DAY FROM '2020-12-13 13:02:42'::timestamp)::INT, 4), ' day')::interval
    END
    , '2021-12-13 13:02:42'::date
    , '5760 min'::INTERVAL
) dd

and it will give me output like below.它会给我 output 如下所示。

2020-12-14 00:00:00.000
2020-12-18 00:00:00.000
2020-12-22 00:00:00.000
2020-12-26 00:00:00.000
2020-12-30 00:00:00.000
2021-01-03 00:00:00.000

but I need output like.但我需要 output 之类的。

2020-12-16 00:00:00.000
2020-12-20 00:00:00.000
2020-12-24 00:00:00.000
2020-12-28 00:00:00.000
2020-01-01 00:00:00.000
2021-01-05 00:00:00.000

currently, the time series days depend upon the timestamp that I pass.目前,时间序列天数取决于我通过的时间戳。 in above it gives me days like 14,18,22...but I want the days like 16,20,24.在上面它给了我像 14,18,22 这样的日子......但我想要像 16,20,24 这样的日子。 multiple of 4..days should not depend on the time I passed in query. 4..days 的倍数不应该取决于我通过查询的时间。 I tried many things but not any success.我尝试了很多东西,但没有任何成功。

Try this:尝试这个:

SELECT date_trunc('day', dd):: TIMESTAMP WITHOUT TIME zone as time_ent
FROM generate_series ( date_trunc('month', '2020-12-13 13:02:42' :: timestamp) :: date + (ceiling (EXTRACT(DAY FROM '2020-12-13 13:02:42'::timestamp)/4)*4 - 1) :: integer
                     , '2021-12-13 13:02:42'::date
                     , '4 days' ::INTERVAL
                     ) dd

see the result结果

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM