@Clementino

Как сгенерировать строки с датами в sql?

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

Пример. Исходная таблица:
user_id reg_date
1 01.11.2020
2 01.12.2020

Результат:
user_id date
1 01.11.2020
1 01.12.2020
1 31.12.2020
1 30.01.2021
1 01.03.2021
2 01.12.2020
2 31.12.2020
2 30.01.2021
2 01.03.2021

Сложность получается в том, что для каждого пользователя может быть разное кол-во результирующих строк, в зависимости от его даты регистрации.
Как это сгенерировать именно в sql запросе, не прибегая к переменным/циклам, не могу придумать...
  • Вопрос задан
  • 327 просмотров
Решения вопроса 1
Mikhail_E
@Mikhail_E
1С, SQL
Да уж ))
Ну вообще думаю будет как-то так :
Пример на MSSQL
Пример на Psql13

Результат:
+========+============+=====================+
| userid | regdate    | newdate             |
+========+============+=====================+
| 1      | 2020-11-01 | 2020-11-01 00:00:00 |
+--------+------------+---------------------+
| 1      | 2020-11-01 | 2020-12-01 00:00:00 |
+--------+------------+---------------------+
| 1      | 2020-11-01 | 2020-12-31 00:00:00 |
+--------+------------+---------------------+
| 1      | 2020-11-01 | 2021-01-30 00:00:00 |
+--------+------------+---------------------+
| 1      | 2020-11-01 | 2021-03-01 00:00:00 |
+--------+------------+---------------------+
| 2      | 2020-12-01 | 2020-12-01 00:00:00 |
+--------+------------+---------------------+
| 2      | 2020-12-01 | 2020-12-31 00:00:00 |
+--------+------------+---------------------+
| 2      | 2020-12-01 | 2021-01-30 00:00:00 |
+--------+------------+---------------------+
| 2      | 2020-12-01 | 2021-03-01 00:00:00 |
+--------+------------+---------------------+
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Рекурсивные функции и SQL плохо совместимы - подобная логика обычно выносится вне СУБД, чего и вам советую.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы