使用SQL查询计算每日频率的累积计数

时间:2019-07-05 12:36:46

标签: sql amazon-redshift window-functions cumulative-frequency

我有一个数据集,其中包含“ UI”(唯一ID),时间,频率(UI列中给定值的频率),如下所示:

enter image description here

我想添加一个名为'daily_frequency'的新列,该列简单地按顺序计算给定日期的UI列中的每个唯一值,如下图所示。

enter image description here

例如,如果UI = 114737并在一天内重复2次,则我们在daily_frequency列中应该有1和2。

我可以使用group by和cumcount方法对Python和Panda包进行以下操作...

df['daily_frequency'] = df.groupby(['UI','day']).cumcount()+1

但是,由于某些原因,我必须通过SQL查询(Amazon Redshift)执行此操作。

2 个答案:

答案 0 :(得分:2)

我认为您想要一个连续的计数,可以计算为:

COUNT(*) OVER (PARTITION BY ui, TRUNC(time) ORDER BY time
               ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS daily_frequency

答案 1 :(得分:0)

尽管Salman的答案似乎是正确的,但我认为ROW_NUMBER()更简单:

COUNT(*) OVER (PARTITION BY ui, time::date
               ORDER BY time
              ) AS daily_frequency