使用 SQL 查询计算每日频率的累积计数(在 Amazon Redshift 中)
Cumulative count for calculating daily frequency using SQL query (in Amazon Redshift)
我有一个数据集包含 'UI'(唯一 ID)、时间、频率(UI 列中给定值的频率),如下所示:
我想添加一个名为 'daily_frequency' 的新列,它只按顺序计算给定日期 UI 列中的每个唯一值,如下图所示。
例如UI=114737,一天重复2次,那么daily_frequency栏应该有1,2。
我可以使用 Python 和 Panda 包使用 group by 和 cumcount 方法做到这一点,如下所示...
df['daily_frequency'] = df.groupby(['UI','day']).cumcount()+1
但是,出于某种原因,我必须通过 SQL 查询 (Amazon Redshift) 来完成此操作。
我想你想要一个 运行 计数,可以计算为:
COUNT(*) OVER (PARTITION BY ui, TRUNC(time) ORDER BY time
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS daily_frequency
虽然Salman的回答似乎是正确的,但我认为ROW_NUMBER()
更简单:
COUNT(*) OVER (PARTITION BY ui, time::date
ORDER BY time
) AS daily_frequency
我有一个数据集包含 'UI'(唯一 ID)、时间、频率(UI 列中给定值的频率),如下所示:
我想添加一个名为 'daily_frequency' 的新列,它只按顺序计算给定日期 UI 列中的每个唯一值,如下图所示。
例如UI=114737,一天重复2次,那么daily_frequency栏应该有1,2。
我可以使用 Python 和 Panda 包使用 group by 和 cumcount 方法做到这一点,如下所示...
df['daily_frequency'] = df.groupby(['UI','day']).cumcount()+1
但是,出于某种原因,我必须通过 SQL 查询 (Amazon Redshift) 来完成此操作。
我想你想要一个 运行 计数,可以计算为:
COUNT(*) OVER (PARTITION BY ui, TRUNC(time) ORDER BY time
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS daily_frequency
虽然Salman的回答似乎是正确的,但我认为ROW_NUMBER()
更简单:
COUNT(*) OVER (PARTITION BY ui, time::date
ORDER BY time
) AS daily_frequency