如何根据 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
我在 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