MYSQL - Получить все месяцы между двумя датами (с, по) и данные за этот месяц - PullRequest
0 голосов
/ 13 июля 2020

У меня есть такая таблица:

| id       | date        | user_id  | value |
---------------------------------------------
| 1        | 2019-01-10  |   3      | 20
| 2        | 2019-04-08  |   3      | 30
| 3        | 2019-06-04  |   3      | 40
| 4        | 2019-08-20  |   3      | 50 
| 5        | 2019-11-19  |   3      | 60
| 6        | 2019-01-11  |   4      | 70
| 7        | 2019-02-20  |   4      | 11
| 8        | 2019-03-11  |   4      | 12
| 9        | 2019-07-12  |   4      | 23
--------------------------------

, и я хочу получить значения между двумя датами: date_from и date_to. И все месяцы из этого интервала.

Например:

date_from = 2019-01-08; date_to = 2019-09-10;

Итак, для user_id = 3 я хочу получить что-то вроде этого:

   | date     | value
    -------------------------
   | 2019-01  |   20      |
   | 2019-02  |   NULL    |
   | 2019-03  |   NULL    |
   | 2019-04  |   30      |
   | 2019-05  |   NULL    |
   | 2019-06  |   40      |
   | 2019-07  |   NULL    |
   | 2019-08  |   50      |
   | 2019-09  |   NULL    |
    --------------------------

Кто-нибудь мне поможет? Спасибо!

1 Ответ

0 голосов
/ 13 июля 2020

Вы можете использовать рекурсивный CTE для генерации дат, а затем left join:

with recursive dates as (
      select date('2019-01-08') as dte
      union all
      select dte + interval 1 day
      from dates
      where dte < '2019-09-10'
     )
select extract(year_month from d.dte) as yyyymm, sum(t.value)
from dates d left join
     t
     on d.dte = t.date and t.user_id = 3
group by yyyymm;

Здесь - это скрипт db <>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...