postgresql 如何按单行结果分组获取日期字段

ryoqjall  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(93)

我有记录如下截图(https://i.stack.imgur.com/IacHk.png
我想要这样的结果,如果日期是在特定月份的第1至第15天之间,则返回计数为Month 15,如果日期是在特定月份的第16至第30天之间,则返回计数为Month 30
预期结果如下:
| 计数| Count |
| --| ------------ |
| 0个| 0 |
| 三个| 3 |
| 一个| 1 |
| 二个| 2 |
在排序中,我在POSTGRESS数据库中获得15天间隔的计数
谢谢你,
我尝试使用分组查询,但它返回重复的结果

j1dl9f46

j1dl9f461#

下面的示例是为了说明而故意详细描述的:

with limits as ( -- Determine starting and ending months
  select min(date) as start_date, max(date) as end_date
    from my_table
), months as ( -- Generate month series and explode to month halves
  select gs.month_start, o.offset_start, o.offset_end
    from limits 
         cross join lateral 
           generate_series(
             date_trunc('month', start_date),
             date_trunc('month', end_date),
             interval '1 month'
           ) as gs(month_start)
         cross join (
           values (interval '0 days',  interval '15 days'),
                  (interval '15 days', interval '1 month') 
         ) as o(offset_start, offset_end)
), ranges as ( -- Create tsrange column
  select tsrange(
           month_start + offset_start, 
           month_start + offset_end
         ) as bucket
    from months
) -- Join back to data, aggregate, and create labels
select concat(
         lower(r.bucket)::date,
         ' to ',
         (upper(r.bucket) - interval '1 day')::date
       ) as "Date", 
       count(t.date) as "Count"
  from ranges r
       left join my_table t on t.date <@ r.bucket
 group by bucket;

字符串
工作fiddle

相关问题