еженедельная запись максимального количества в oracle

#sql #oracle

#sql #Oracle

Вопрос:

тест таблицы имеет идентификатор столбца, created_date, sal и данные, как показано ниже:

ID create_date sal
1 20 ЯНВАРЯ-2021 5000
2 20 ЯНВАРЯ-2021 6000
3 19 ЯНВАРЯ- 2021 4000

у нас есть такие данные для каждой даты.

Я выбираю количество записей за каждый день, используя приведенный ниже запрос:

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

Мне нужен вывод для максимального количества записей на еженедельной основе:

количество (*) create_date
500 20 ЯНВАРЯ-2021
600 10 ЯНВАРЯ — 2021
300 1 ЯНВАРЯ — 2021

Пожалуйста, предложите.

вот так.

Пожалуйста

Ответ №1:

Вы можете использовать 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
 

Комментарии:

1. этот запрос возвращает максимальное количество за неделю, но дата отображается некорректно. например: для недели с 25 января по 30 января максимальная запись доступна для 28 января, но ее дата отображения — 25 января.

2. Он покажет дату начала недели. Вам нужна дата максимального количества дней? Смотрите обновленный ответ.

3. да .. точная дата, на которую приходится максимальное количество за эту неделю