Как получить максимальный день каждого месяца в sql / snowflake

Я пытаюсь вернуть максимальный день каждого месяца из набора данных. Я говорю "макс", потому что он основан на загрузках с понедельника по пятницу. Таким образом, если последний день месяца выпадает на субботу (скажем, 31.10.2019), то последняя дата загрузки будет в пятницу (30.10.2019).

Я пробовал выбрать максимум (дату) из группы my_table по datepart («месяц», дата);


person Ted Mosby    schedule 04.12.2019    source источник
comment
Что не так с вашим текущим запросом? Пожалуйста, покажите нам образцы данных и ожидаемые результаты.   -  person GMB    schedule 04.12.2019
comment
Я согласен с @GMB, ваш запрос выглядит отлично, поэтому проблема должна заключаться в тех частях, которые вы не раскрыли ...   -  person Hans Henrik Eriksen    schedule 04.12.2019


Ответы (3)


Вы можете использовать dayofweekiso, чтобы получить только эти monday-friday транзакции.

select max(date), month(case when date) from my_table 
where dayofweekiso(date) between 1 and 5
group by year(date), month(date);
person Ed Bangga    schedule 04.12.2019
comment
Даже не уверен, что здесь необходимо предложение WHERE. Данных с датами в субботу или воскресенье не будет, если я правильно понимаю вопрос. - person Mike Walton; 04.12.2019

Используя snowflake_sample_date, есть измерение даты, небольшое изменение в запросе MIkes. 1-7 выглядит хорошо

ВЫБРАТЬ
MAX (d.d_date) FROM
tpcds_sf10tcl.date_dim d WHERE DAYOFWEEKISO (d.d_date) МЕЖДУ 1 И 7 ГРУППИРОВАТЬ ПО ГОДУ (d.d_date), MONTH (d.d_date) ORDER BY MAX (d_date) ;

person sks    schedule 04.12.2019

QUALIFY можно использовать для создания рейтинга и фильтрации по нему. на лету. Таким образом, ранжируйте по разделам по году и месяцу, упорядочивайте по дате по убыванию, чтобы ранжировать последние дни каждого месяца в вашей таблице как 1.

SELECT * FROM TABLE
QUALIFY RANK() OVER(PARTITION BY YEAR(DATE), MONTH(DATE) ORDER BY DATE DESC) = 1;
person Karl Anka    schedule 04.12.2019