根据 SQL 的顺序对 table 中的每一次出现进行计数

Giving every ocurrence in a table a count based in order on SQL

我在名为 Snowflake 的 SQL 数据库模式中有 table,类似于 PostgreSQL,其中包含以下行:

server_time, user_id, transaction_id, revenue_eur

我正在尝试查看重新转化,所以我想为每个用户计算他第一次、第二次、第三次购买的...。 Snowflakes 允许 LATERAL JOINS 但我不知道该怎么做。

输出应如下所示:

      date     user_id   purchased_number
   2019-07-25  123121         1
   2019-07-26  123121         2
   2019-07-27  123121         3
   2019-07-25   8565          1  
   2019-07-25   8565          2

这通常使用 window 函数完成:

select cast(server_time as date), user_id, 
       row_number() over (partition by user_id order by server_time) as purchased_number
from the_table;

假设 server_time 是一个用 timestamp 数据类型定义的列,表达式 cast(server_time as date) 会将其转换为 "plain" 日期(没有时间)。以上是ANSI标准SQL,不知道Snowflake是否支持。如果不是,您需要查阅手册以了解如何将 timestamp 值转换为 date 值。