在 Teradata 中,如何使用 SQL 比较多个日期和 select 最新日期?
In Teradata, with SQL, how do I compare multiple dates and select the latest date?
下面是 table 和所需的输出。
我要selectID,STATUS 和 DATE 其中 DATE 是最新日期。如果DATE相同,只有select记录STATUS = A。
我需要能够使用 SQL 在 Teradata 中执行此操作。
Table:
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
如何将 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
Teradata 支持语法扩展以直接根据窗口聚合函数的结果进行过滤,而无需派生 Table:
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
下面是 table 和所需的输出。
我要selectID,STATUS 和 DATE 其中 DATE 是最新日期。如果DATE相同,只有select记录STATUS = A。
我需要能够使用 SQL 在 Teradata 中执行此操作。
Table:
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
如何将 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
Teradata 支持语法扩展以直接根据窗口聚合函数的结果进行过滤,而无需派生 Table:
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