Предположим, я хочу извлечь данные о последних 10 завершенных неделях (т.е. неделя 42 - неделя 52 из таблицы ниже, поскольку неделя 53 и 0 не завершены 7 дней) из таблицы и выполнить некоторые вычисления. Как я могу сделать это с помощью MySQL?

Пара дополнительных соображений:

  1. таблица может содержать данные за несколько лет, т.е. несколько номеров недель 2019 года - неделя 51 и 2020 года - неделя 51
  2. как быть с непоследовательными номерами недель, т.е. с 44-й недели на 2-ю неделю следующего года
dt          wk
2020-12-14  51
2020-12-15  51
2020-12-16  51
2020-12-17  51
2020-12-18  51
2020-12-19  51
2020-12-20  51
2020-12-21  52
2020-12-22  52
2020-12-23  52
2020-12-24  52
2020-12-25  52
2020-12-26  52
2020-12-27  52
2020-12-28  53
2020-12-29  53
2020-12-30  53
2020-12-31  53
2021-01-01  0

Momoco

Ответов: 1

Ответы (1)

Вы можете проверить, все ли семь дней входят в неделю, с помощью оконных функций. Предположим, что ваши недели начинаются в каждом году:

select t.*
from (select t.*, dense_rank() over (order by year(dt) desc, wk desc) as seqnum
      from (select t.*, count(*) over (partition by wk, year(dt)) as wk_cnt
            from t
           ) t
      where wk_cnt = 7
     ) t
where seqnum <= 10;

2022 WebDevInsider