SQL - Left Join возвращает последнюю запись - PullRequest
0 голосов
/ 20 февраля 2019

Мой текущий код:

SELECT
T1.SC,
T2.ACC,
T3.C_IDENT,
T4.TITLE,
T4.MID,
T4.SUR
FROM D_REG.AR_JOINT T1

LEFT JOIN E_BASE.ACC_TRANS T2
ON T1.SC = T2.SC
AND T1.ACC = T2.ACC
AND T2.IDENTIFEIR_END_DATE ='3000-12-31'

LEFT JOIN E_BASE.B_HOLDING T3
ON T2.M_IDENT = T3.C_IDENT
AND T3.EFF_END_DATE ='3000-12-31'
AND T3.P_HOLDING_END+DATE ='3000-12-31'

LEFT JOIN E_BASE.PNAM T4
ON T3.C_IDENT = T4.C_IDR
AND T4.EFF_END_DATE ='3000-12-31'

В данный момент код заявляет, что должен вернуть результат, если Конечные даты = '3000-12-31'.Однако, если будут внесены какие-либо изменения в какой-либо из столбцов таблицы, будет создана дублирующаяся строка для этой записи.У оригинала будет дата окончания даты внесения поправки, в то время как новая запись будет иметь дату окончания «3000-12-31».

Мой код будет затем возвращать только активные записи.Если запись больше не активна, у нее будет конечная дата, такая как «2018-10-15», и поэтому она возвращается????значения из T4.

Как я могу изменить код, чтобы вернуть запись с самой поздней датой окончания?

1 Ответ

0 голосов
/ 20 февраля 2019

Для Teradata вы можете использовать Квалифицировать , чтобы ограничить функции ODAP, ROW_NUMBER() в этом случае. Не можете полностью ответить на ваш вопрос, не зная больше о ваших данных.Но в основном добавьте к вашему запросу

QUALIFY ROW_NUMBER() OVER (PARTITION BY <YOUR KEY COLUMN(S) ORDER BY  T4.EFF_END_DT DESC) = 1

, который даст вам самую последнюю строку (на основе вашего столбца eff_end_dt) для каждого «ключа».

...