Максимальная дата с предложениями WHERE и HAVING- Teradata - PullRequest
2 голосов
/ 22 января 2012

У меня есть одна таблица транзакций с acc_nbr, tran_nbr, tran_amt, tran_dt и tran_typ.

Мне нужно найти только acc_nbr, где tran_typ = 'xx' и sum (tran_amt) <0, и показать самый последний tran_dt. </p>

Я могу найти все учетные записи, у которых сумма значения «xx» tran_typ меньше нуля, но, похоже, я не могу указать дату без добавления всех транзакций, которые содержат отрицательный tran_typ «xx».

Что работает до сих пор:

    SEL acc_nbr, SUM(tran_amount) as error
    FROM DATABASE.TRAN_TBL

    WHERE tran_typ = 'xx' 
    GROUP BY acc_nbr
    HAVING sum(tran_amt)<0

Как мне указать дату последней транзакции?

Ответы [ 2 ]

4 голосов
/ 22 января 2012

Лучше всего было бы найти все счета с отрицательной суммой в одном наборе, последнюю дату транзакции для каждого счета в другом наборе и объединить их вместе на одном счете.

Вы можете попробовать что-то вроде:

SEL sumtran.acc_nbr, sumtran.error, latest.latest_dt 
FROM 
  ( SEL acc_nbr, SUM(tran_amt) AS error
    FROM DATABASE.TRAN_TBL
    WHERE tran_typ = 'xx' 
    GROUP BY acc_nbr
    HAVING sum(tran_amt)<0 ) AS sumtran
INNER JOIN
  ( SEL acc_nbr, MAX(tran_dt) AS latest_dt
    FROM DATABASE.TRAN_TBL
    GROUP BY acc_nbr ) AS latest
ON sumtran.acc_nbr = latest.acc_nbr

Синтаксис для teradata может немного отличаться, но общая идея должна быть такой же.

0 голосов
/ 22 января 2012

Я не совсем уверен, что понимаю проблему, но вы должны просто добавить MAX (trans_dt) к выбору, и это даст вам более позднюю дату транзакции

SEL acc_nbr, SUM(tran_amount) as error, MAX(tran_dt) as most_recent_dt
FROM DATABASE.TRAN_TBL

WHERE tran_typ = 'xx' 
GROUP BY acc_nbr
HAVING sum(tran_amt)<0
...