postgresql 将date_trunc()从星期日而不是星期一开始

nukf8bse  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(171)
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中,默认情况下周从星期一开始。有什么方法可以将周开始改为星期天吗?

oalqel3c

oalqel3c1#

目前还不清楚如何计算不同的日期转换为 “每周总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

字符串
fiddle
在这种情况下,“origin”(timestamp '2023-1-1')必须是星期天!它也是一个有效的timestamp文字。不要混合使用timestamptimestamptz,以避免大小写错误。
参见:

  • 在Posterre中,将时间戳缩短为5分钟的最快方法是什么?
  • 在PostgreSQL中生成两个日期之间的时间序列

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


fiddle
参见:

  • PostgreSQL自定义周数-第一周包含2月1日

相关问题