Как дублировать name_ids за диапазон дат - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь взять список идентификаторов имен и дублировать их в течение 25 месяцев, поэтому, если у меня было 100 имен, я хочу получить 2500 строк. Я довольно плохо знаком с SQL в целом, поэтому у меня возникли некоторые проблемы с ним.

Я использую запрос для генерации строки дат на основе номера строки таблицы. Используемый мной набор данных не имеет дат, связанных с идентификаторами имен, поэтому я не могу присоединиться к ним.

select distinct to_date(date_part(month, d.n) 
|| '/' 
|| date_part(year, d.n), 'MM/YYYY') AS daten
select (getdate()::date - row_number() over (order by true))::date as n
from any_table) as d
where datediff(mm, daten, current_date) < 25

1 Ответ

1 голос
/ 25 июня 2019

Мне кажется, я знаю, чего вы пытаетесь достичь, но отправленный вами запрос не работает для меня.

В основном, если вы хотите получить все перестановки двух таблиц, вы в основном хотите выполнить операцию CROSS JOIN.

Я переписал запрос к тому, что, как я понял, вы хотели достичь. Дайте мне знать, если это не так.

with months as (
    select to_char(dateadd(month, - row_number() over (), current_date), 'MM/YYYY') as month
    from base_zalon_backend.request
    limit 5 -- gives you last 5 months (including current month)
), ids as (
    select 'id_1' as id UNION ALL
    select 'id_2' union all
    select 'id_3' union all
    select 'id_4' union all
    select 'id_5'
)
select * from months cross join ids order by month, id

возвращается:

month   id
01/2019 id_1
01/2019 id_2
01/2019 id_3
01/2019 id_4
01/2019 id_5
02/2019 id_1
02/2019 id_2
02/2019 id_3
02/2019 id_4
02/2019 id_5
03/2019 id_1
03/2019 id_2
03/2019 id_3
03/2019 id_4
03/2019 id_5
04/2019 id_1
04/2019 id_2
04/2019 id_3
04/2019 id_4
04/2019 id_5
05/2019 id_1
05/2019 id_2
05/2019 id_3
05/2019 id_4
05/2019 id_5
...