2015-08-19 5 views
-1

У меня есть следующий выбор, и я бы хотел вернуть только последний TranDate, когда Tracct встречается более одного раза.Выберите MAX из 2 таблиц

SELECT tracct, trancd, trnsta, date(digits(trdat7)) as TranDate, type 
FROM DATALIBRARY.LNHIST LNHIST 
JOIN DATALIBRARY.LNMAST LNMAST 
    on LNHIST.TRACCT = LNMAST.ACCTNO 
WHERE YEAR(date(digits(trdat7))) >= YEAR(current_date) - 2 and trnsta = '1' and trancd = 891 and type not like 'I%' 

Текущий результат:

|Tracct | Trancd | Trnsta | TranDate | Type| 
---------------------------------------------- 
425660 | 891 | 1  | 2013-05-10 | C5 | 
102649 | 891 | 1  | 2013-05-10 | C5 | 
102741 | 891 | 1  | 2015-08-08 | RO | 
102741 | 891 | 1  | 2015-09-10 | RO | 
102741 | 891 | 1  | 2014-05-10 | RO | 
115298 | 891 | 1  | 2013-03-31 | CV | 
102313 | 891 | 1  | 2015-04-10 | CL | 
102313 | 891 | 1  | 2015-05-10 | CL | 
+0

Что исходных данных выглядеть? –

ответ

1

Вам нужен nested query

Позвоните запрос SUBQUERY.

Я думаю, что вы хотите

SELECT Tracct, Trancd, Trnsta, Type, MAX(TranDate) 
FROM SUBQUERY 
GROUP BY Tracct, Trancd, Trnsta, Type 

Или вы можете переписать запрос на что-то вроде этого

SELECT tracct, trancd, trnsta, type, MAX(date(digits(trdat7))) as TranDate 
FROM DATALIBRARY.LNHIST LNHIST 
JOIN DATALIBRARY.LNMAST LNMAST 
    on LNHIST.TRACCT = LNMAST.ACCTNO 
WHERE YEAR(date(digits(trdat7))) >= YEAR(current_date) - 2 and trnsta = '1' and trancd = 891 and type not like 'I%' 
GROUP BY tracct, trancd, trnsta, type 
+0

Переписан запрос, работает отлично. – macunte

+0

Да, сначала я сделал вложенный запрос, потому что вопрос не содержал подробной информации о схеме и должен работать над тем, что ваш запрос работает. Затем я понимаю, как можно обновить ваш запрос. Но если есть шанс взглянуть на ссылку, это хорошее чтение. –