使 date_trunc() 在星期日而不是星期一开始

问题描述 投票:0回答:1
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 中,一周默认从星期一开始。有什么办法可以将一周的开始时间改为星期日吗?

postgresql datetime amazon-athena dbeaver
1个回答
11
投票

尚不清楚计算不同日期如何转化为“按周计算总 ID 数”。但让我们关注标题中的核心问题。

Postgres 14 或更高版本

使用

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
以避免极端情况错误。参见:

Postgres 13 或以上

前后移动时间戳。在喂

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

小提琴

参见:

© www.soinside.com 2019 - 2024. All rights reserved.