带有WHERE和HAVING子句的最大日期 - Teradata

时间:2012-01-22 01:36:19

标签: sql teradata

我有一个包含acc_nbr,tran_nbr,tran_amt,tran_dt和tran_typ的交易表。

我只需要找到acc_nbr,其中tran_typ ='xx'和sum(tran_amt)< 0并显示最近的tran_dt。

我可以找到'xx'trans_typ总和小于零的所有帐户,但我似乎无法在不添加包含负tran_typ'xx'的所有交易的情况下获取日期。< / p>

到目前为止有效:

    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 个答案:

答案 0 :(得分:4)

最好的选择是在一个集合中查找所有具有负数的帐户,在另一个集合中找到每个帐户的最新交易日期,并且内部将它们连接在同一帐户中。

您可能想要尝试以下内容:

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的语法可能略有不同,但总体思路应该相同。

答案 1 :(得分:0)

我不太清楚我是否理解这个问题,但您应该只能在选择中添加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