我在Teradata中有一个看起来像这样的表
ID | Date | Values
------------------------
abc | 1Jan2015 | 1
abc | 1Dec2015 | 0
def | 2Feb2015 | 0
def | 2Jul2015 | 0
我想写一段SQL,它只保留每个ID的最早日期。所以我想要的结果是
ID | Date | Values
------------------------
abc | 1Jan2015 | 1
def | 2Feb2015 | 0
我知道有顶级的语法,但它似乎只适用于不在组内的整个表。
基本上我如何在群组中做前n?
答案 0 :(得分:2)
可以使用ROW_NUMBER轻松重写TOP:
select *
from tab
qualify
row_number() over (partition by id order by date) = 1
答案 1 :(得分:1)
您可以使用row_number()
:
select t.*
from (select t.*,
row_number() over (partition by id order by date) as seqnum
from table t
) t
where seqnum = 1;