获取SQL表中每个用户ID的最后一个元素

获取SQL表中每个用户ID的最后一个元素,sql,datetime,teradata,greatest-n-per-group,window-functions,Sql,Datetime,Teradata,Greatest N Per Group,Window Functions,我正试图弄清楚如何在SQL中执行以下操作(我专门在Teradata中工作)。根据下表中的用户ID、交易日期和购买的物品,我试图找出每个用户ID如何获得最后购买的物品,例如: User ID Date Product 123 12/01/1996 A 123 12/02/1996 B 123 12/03/1996 C 124 12/01/1996

我正试图弄清楚如何在SQL中执行以下操作(我专门在Teradata中工作)。根据下表中的用户ID、交易日期和购买的物品,我试图找出每个用户ID如何获得最后购买的物品,例如:

User ID       Date            Product
 123         12/01/1996         A
 123         12/02/1996         B
 123         12/03/1996         C
 124         12/01/1996         B
 124         12/04/1996         A
 123         12/05/1996         D
因此,在这种情况下,查询将返回:

User ID         Last Product Bought
  123                   D
  124                   A
等等。我尝试在Teradata中使用分区依据或窗口函数,但不知道如何实现它


感谢您的帮助。

在Teradata中,您可以使用
行号()
限定
来解决此每组排名前1的问题:

select t.*
from mytable t
qualify row_number() over(partition by yser_id order by date desc) = 1

在Teradata中,您可以使用
row_number()
qualify
来解决这一每组排名前1的问题:

select t.*
from mytable t
qualify row_number() over(partition by yser_id order by date desc) = 1

将Teradata的专有语法应用于筛选窗口聚合:

select *
from tab
qualify
   row_number()
   over (partition by User_ID         -- each user
         order by Date_col desc) = 1  -- lastest row

将Teradata的专有语法应用于筛选窗口聚合:

select *
from tab
qualify
   row_number()
   over (partition by User_ID         -- each user
         order by Date_col desc) = 1  -- lastest row