【发布时间】:2022-01-17 00:22:01
【问题描述】:
我正在使用以下查询生成一个时间序列。
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
它会给我如下输出。
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
但我需要类似的输出。
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
目前,时间序列天数取决于我通过的时间戳。在上面它给了我像 14,18,22 这样的日子......但我想要像 16,20,24 这样的日子。 4..days 的倍数不应该取决于我通过查询的时间。我尝试了很多东西,但都没有成功。
【问题讨论】:
-
嗨,你说“4的倍数”,但从什么时候开始?您还说“天不应该取决于我在查询中传递的时间”,但是它们应该取决于什么?
-
假设开始日期是“2020-12-13 13:02:42”,那么系列应该从 4 的倍数开始,例如“2020-12-16 00:00:00.000”。 4 的倍数仅用于开始一个系列。不依赖于时间的天数也用于从“2020-12-14 00:00:00.000”开始类似上述查询的系列。因此,它不应依赖于“2020-12-13 13:02:42”,而应从“2020-12-16 00:00:00.000”开始。
标签: sql postgresql