在Teradata中,使用SQL,如何比较多个日期并选择最新日期?

时间:2016-04-13 03:46:18

标签: sql teradata greatest-n-per-group

下面是表格和所需的输出。

我想选择 ID 状态 DATE DATE 是最新日期。如果 DATE 相同,则只选择 状态 = A 的记录。

我需要能够在Teradata中使用SQL执行此操作。

表格

ID        STATUS        DATE
5550500     A          11/02/2016
5550500     I          8/08/2008
5551688     A          23/08/2013
5551688     I          23/08/1997
5551688     I          23/08/2013
5551966     I          18/10/1999
5551966     I          24/10/2003
5551966     I          10/11/1997
5551966     I          2/09/2014

必填项:

ID        STATUS        DATE
5550500    A           11/02/2016
5551688    A           23/08/2013
5551966    I           2/09/2014

2 个答案:

答案 0 :(得分:1)

Teradata支持语法扩展,可直接过滤窗口聚合函数的结果,而无需派生表:

select *
from tab
QUALIFY -- similar to HAVING after GROUP BY
   row_number() -- or RANK to return multiple rows with the same (max date & status)
   over (partition by id 
         order by date desc, status) = 1

答案 1 :(得分:0)

如何将row_number与子查询一起使用:

select *
from (
    select id, status, date, 
           row_number() over (partition by id 
                              order by date desc, status) rn
    from yourtable
) t
where rn = 1