У меня есть таблица, которая содержит несколько периодов регистрации (дата и время начала регистрации, а также дата и время окончания этого экземпляра регистрации). Для каждой строки (периода регистрации) существует столбец состояния, который содержит состояние в конце периода регистрации. Я пытался получить статус, связанный с самой последней датой окончания регистрации для данного идентификатора. Я использовал оконную функцию, чтобы получить самую последнюю конечную дату интереса для каждого идентификатора, а затем я захотел ВЛЕВО СОЕДИНИТЬСЯ по идентификатору и конечной дате, чтобы получить статус из той же таблицы, в которой я использовал оконную функцию. На самом деле должна быть только одна комбинация для данной конечной даты и статуса для каждого идентификатора, но каким-то образом я получаю больше строк, чем в левой таблице.
Как я уже упоминал ранее, мой подход заключался в использовании окнафункция для получения MAX(end_date)
для идентификатора и некоторого другого столбца, назовем его enrollment_number
. Затем используйте LEFT JOIN для этой таблицы и ее родительской таблицы, чтобы получить статус, связанный только с этой датой. Позже я хотел бы использовать результат этого объединения, чтобы внести статус, связанный с датой окончания, в другие таблицы, где мне это нужно.
WITH
my_first_test AS
(
SELECT my_id,
enrollment_number,
MAX(end_date_of_enrollment) OVER (partition by my_id, enrollment_number) AS end_date_enrolled
FROM enrollments
)
SELECT mft.my_id, mft.end_date_enrolled, e.status
FROM my_first_test AS mft
LEFT JOIN enrollments AS e
ON mft.my_id = e.my_id AND mft.end_date_enrolled = e.end_date_enrolled;
CTE возвращает 42917 строк, такое же количество строккак в таблице enrollments
, которая должна быть, если я правильно ее понимаю.
Затем я ОСТАЮСЬ СОЕДИНЯТЬСЯ enrollments
, чтобы получить информацию из столбца status
, также содержащегося в enrollments
Таблица. LEFT JOIN выполняется на my_id
и end_date_enrolled
.
Я ожидаю 42917 строк в итоговой таблице, потому что my_id
и end_date_enrolled
вместе должны быть уникальными. Однако в моей финальной таблице я получил немного больше строк - 44408. Мне было интересно, сможет ли сообщество StackOverflow помочь мне разгадать эту загадку. Я использую SQL в AWS Redshift.