Создать большой набор дат для каждого пользователя - PullRequest
0 голосов
/ 28 октября 2018

Мне нужна помощь по SQL для создания большого набора данных.

У меня есть список пользователей (id) и дата, когда они были активированы с помощью нашего сервиса (activ_date).

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

То, что у меня есть сегодня

--------------------
id | activated_date
--------------------
2  | 01/01/2017
63 | 23/04/2018
.. | ...
--------------------

Чего я хочу достичь

--------------------
id | date
--------------------
2  | 01/01/2017 <-- activation date
2  | 02/01/2017
2  | 03/01/2017
2  | 04/01/2017
2  | 05/01/2017
.. | ...
2  | 27/10/2018 <-- yesterday
63 | 23/04/2018 <-- activation date
63 | 24/04/2018
63 | 25/04/2018
63 | 26/04/2018
.. | ...
63 | 27/10/2018 <-- yesterday

1 Ответ

0 голосов
/ 28 октября 2018

Вы можете сгенерировать даты рекурсивно, поэтому проблема будет решена путем RECURSIVE CTE следующим образом:

создать тестовую таблицу:

create table your_table
(
  id    int not null,
  activated_date    timestamp  not null
);

добавить пример данных:

insert into your_table
values
(2, '2017/01/01'),
(63, '2018/04/23');

и завершить рекурсивный запрос:

with
recursive
    cte(id, active_date)
as
(
    select
        id,
        activated_date  as active_date
    from
        your_table
    union all
    select
        t.id,
        active_date + justify_days(interval '1 days')
    from
        cte
    inner join
        your_table t
    on
        cte.id = t.id
    where
        cte.active_date < now()
)
select
    *
from
    cte
order by 1, 2;

примерить: dbfiddle

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