根据 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
值。
我在名为 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
值。