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

Eth*_*mih 5 postgresql datetime dbeaver amazon-athena

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
Run Code Online (Sandbox Code Playgroud)

这个查询可以让我按周获得总 ID 的运行总数。但在 Postgres 中,一周默认从星期一开始。有什么办法可以将一周的开始时间更改为星期日吗?

Erw*_*ter 14

目前尚不清楚计算不同日期如何转化为“按周计算的 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
Run Code Online (Sandbox Code Playgroud)

小提琴

在这种情况下,“起源”( 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
Run Code Online (Sandbox Code Playgroud)

小提琴

看: