Select date_trunc('week',dateTime) Date_week, Max(Ranking) Runing_Total_ID
from (select datetime, id , dense_rank () over (order by datetime) as Ranking
from Table1)
group by 1
这个查询对我有用,可以按周提供总 ID 的运行总数。但在 Postgres 中,一周默认从星期一开始。有什么办法可以将一周的开始时间改为星期日吗?
尚不清楚计算不同日期如何转化为“按周计算总 ID 数”。但让我们关注标题中的核心问题。
date_bin()
:
-- date_bin() in Postgres 14+
SELECT date_bin('7 days' -- stride
, datetime -- source
, timestamp '2023-1-1' -- origin
) AS date_week
, max(ranking) AS runing_total_id
FROM (SELECT datetime, dense_rank() OVER (ORDER BY datetime) AS ranking FROM tbl) sub
GROUP BY 1
ORDER BY 1, 2; -- optional
在这种情况下,“起源”(
timestamp '2023-1-1'
)必须是星期日!它也是一个有效的 timestamp
文字。不要混合使用 timestamp
和 timestamptz
以避免极端情况错误。参见:
前后移动时间戳。在喂
timestamp
到date_trunc()
之前添加一天,然后再次减去:
SELECT date_trunc('week', datetime + interval '1 day') - interval '1 day' AS date_week
, max(rnk) AS runing_total_id
FROM (SELECT datetime, dense_rank() OVER (ORDER BY datetime) AS rnk FROM tbl) sub
GROUP BY 1
ORDER BY 1, 2; -- optional
参见: