首页 > 解决方案 > oracle 中的每周最大计数记录

问题描述

表测试具有列 id、created_date、sal 和如下数据:

ID 创建日期 萨尔
1 2021 年 1 月 20 日 5000
2 2021 年 1 月 20 日 6000
3 2021 年 1 月 19 日-1 月 4000

我们每个日期都有这样的数据。

我使用以下查询选择每天的记录数:

select count(*) ,create_date from test
group by create_date desc
order by 2 desc;

我想要每周输出最大记录数:

数数(*) 创建日期
500 20-2021 年 1 月
600 2021 年 1 月 10 日至 1 月
300 2021 年 1 月 1 日至 1 月

请建议。

像这样。

标签: sqloracle

解决方案


您可以使用trunc日期到 iso 周并使用两个级别的分组,如下所示:

Select max(cnt) as max_cnt, 
       trunc(create_date,'IW') as week_start_date
  From
    (select count(*) as cnt, 
            create_date
       from test
      Group by create_date )
group by trunc(create_date,'IW') 
order by 2 desc;

如果你还想要日期,那么你需要使用分析函数作为 dollows:

Select * from
     (select count(*) as cnt, 
            create_date,
            Row_number() over (partition by trunc(create_date,'IW') 
                               order by count(*) desc) as rn
       from test
      Group by create_date) t
Where rn = 1

推荐阅读