Как получить максимум пять последовательных значений в год? - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть годовой список продаж товара за последние 20 лет.

данные примерно такие.

date       ;     sales value
2001-01-01 ;      423
2001-01-02 ;      152
2001-01-03 ;      162
2001-01-04 ;      172
.
.
.

У меня проблема с поведением.Я должен найти пять последовательных дней, когда сумма продаж максимальна за год, за каждый год, за последние 20 лет.Затем, используя результат, я должен проанализировать структуру расходов.

как я могу получить 5 последовательных дней, чья сумма является максимальной за год?

Я должен получить ее за все годы с датами и суммойпродаж в эти 5 дней общей стоимости.Может ли кто-нибудь помочь мне в моем назначении, пожалуйста?

TIA

1 Ответ

0 голосов
/ 08 февраля 2019

Ну, в MySQL 8+ вы можете использовать оконные функции.В более ранних версиях это коррелированный подзапрос.Это выглядит так:

select year(t.date),
       max(next_5_days_sales),
       substring_index(group_concat(date order by next_5_days_sales desc), ',', 1) as date_at_max
from (select t.*,
             (select sum(t2.sales)
              from t t2
              where t2.date >= t.date and t2.date < t.date + interval 5 day
             ) as next_5_days_sales
      from t
     ) t
group by year(t.date);

Примечания:

  • Вам необходимо сбросить group_concat_max_len, потому что 1024, вероятно, недостаточно для промежуточного результата.
  • Это позволяет периодам охватывать границы года.

В MySQL 8 используйте оконные функции!

select t.*
from (select t.*,
             row_number() over (partition by year(date) order by next_5_days_sales) as seqnum
      from (select t.*,
                   sum(t2.sales) over (order by date range between current row and 4 following) as as next_5_days_sales
            from t
           ) t
      ) t
where seqnum = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...