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

How to keep the first row of a certain group based on some condition on Teradata SQL?

我在 Teradata 中有 table 看起来像这样

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 个语法,但它似乎只对整体有效 table 而不是在组内。

基本上我如何在组内取得前 n 名?

您可以使用 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;

TOP 可以使用 ROW_NUMBER 轻松重写:

select *
from tab
qualify
   row_number() over (partition by id order by date) = 1