如何根据Teradata SQL上的某些条件保留某个组的第一行?

时间:2015-02-03 23:06:42

标签: sql teradata

我在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?

2 个答案:

答案 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;