Поиск недостающих дат между заданным диапазоном в informatica

#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 является столбцом в этой таблице.