#sql #amazon-redshift
#sql #amazon-redshift
Вопрос:
У меня есть требование, когда мне нужно найти недостающие даты из таблицы с помощью informatica. Например:-
Данные представлены для нижеприведенных дат:-
2020-09-01,
2020-09-03,
2020-09-06,
2020-09-07
Здесь недостающие даты:-
2020-09-02,
2020-09-04,
2020-09-05
Мне нужно заполнить эти недостающие даты в целевой объект, который будет плоским файлом. Пожалуйста, помогите.
Комментарии:
1. Какова ваша базовая база данных?
2. База данных Redshift
3. Может кто-нибудь также помочь с вышеуказанной проблемой?
Ответ №1:
Redshift не имеет рекурсивных CTE или удобного способа создания последовательности. Если в вашей таблице достаточно строк, вы можете сделать что-то вроде этого:
with n as (
select row_number() over (order by date) - 1 as n
from data
),
d as (
select d.date, lead(d.date) over (order by d.date) as next_date
from data d
)
select d n * interval '1 day' as missing_date
from d join
n
on d n * interval '1 day' < d.next_date;
Цель n
состоит в том, чтобы сгенерировать последовательность чисел. Просто должно быть достаточно чисел, чтобы заполнить пробелы.
Комментарии:
1. Этот рекурсивный подход не работает в redshift. Не могли бы вы предоставить другой подход для реализации этого в redshift.
2. @amangupta . , , В этом запросе нет «рекурсивного».
3. Здесь дата ссылается на имя столбца в таблице, а данные ссылаются на имя таблицы? Я запутался в этом, поскольку я заменил все даты, где бы они ни присутствовали, на имя столбца, а данные — на имя таблицы. Пожалуйста, помогите, поскольку я новичок в этом.
4. @amangupta . . .
data
это имя таблицы.date
является столбцом в этой таблице.