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

Taking Last Element of Every User ID In SQL Table

我想弄清楚如何在 SQL 中执行以下操作(我专门在 Teradata 中工作)。鉴于以下 table 的用户 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

因此在这种情况下查询将 return:

User ID         Last Product Bought
  123                   D
  124                   A

等等。我尝试在 Teradata 中使用 Partition By 或 Window 函数,但无法弄清楚如何实现它。

感谢您的帮助。

在 Teradata 中,您可以使用 row_number()qualify 来解决这个 top-1-per-group 问题:

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