获取 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
我想弄清楚如何在 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