繁体   English   中英

如何按星期分组使用基于星期天的星期

[英]How to group by week use sunday based week

是否可以在 posgresql 中按星期使用基于星期日开始的日期进行分组? 如果是这样,逻辑是什么?

对的,这是可能的。 使用date_bin function。 它在 PG 版本 14 及更高版本中可用。
是 PG14 之前版本的实现。
插图:

select date_bin('1 week', d, '2022-01-02')::date as db, count(1)
from generate_series('2022-07-01'::timestamp, '2022-10-01', '1 day') as d
group by db
order by db;

/*
2022-01-02 is a Sunday

db        |count|
----------+-----+
2022-06-26|    3|
2022-07-03|    7|
2022-07-10|    7|
2022-07-17|    7|
2022-07-24|    7|
2022-07-31|    7|
2022-08-07|    7|
2022-08-14|    7|
2022-08-21|    7|
2022-08-28|    7|
2022-09-04|    7|
2022-09-11|    7|
2022-09-18|    7|
2022-09-25|    6|
*/

或者,您可以在任何版本上使用date_trunc 当您按周截断时,它将使用星期一,但这可以通过添加一天来解决,以便星期日日期滚动到下一周:

select
  date_trunc ('week', my_date + 1)
from
  my_table
group by
  date_trunc ('week', my_date + 1)

当您渲染最终的 output 时,请务必从字段中减去日期(无需在 group-by 中这样做):

select
  date_trunc ('week', my_date + 1) - interval '1 day' as sunday,
  count (*)
from
  my_table
group by
  date_trunc ('week', my_date + 1)

如果my_date是时间戳(以下也适用于日期),则:

date_trunc ('week', my_date + interval '1 day')

代替:

date_trunc ('week', my_date + 1)

您也可以将其封装到 function 中,但除非您在所有地方都使用它,否则这似乎有点矫枉过正。

create or replace function sunday(input_date date)
returns date
language sql
as
$BODY$
  select (date_trunc ('week', input_date + 1) - interval '1 day')::date
$BODY$

select
  sunday(my_date), count (*)
from
  my_table
group by
  sunday(my_date)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM