#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. да .. точная дата, на которую приходится максимальное количество за эту неделю