0

我有一个包含“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) 来执行此操作

4

2 回答 2

2

我认为您想要一个运行计数,可以计算为:

COUNT(*) OVER (PARTITION BY ui, TRUNC(time) ORDER BY time
               ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS daily_frequency
于 2019-07-05T12:43:13.770 回答
0

虽然萨尔曼的回答似乎是正确的,但我认为ROW_NUMBER()更简单:

COUNT(*) OVER (PARTITION BY ui, time::date
               ORDER BY time
              ) AS daily_frequency
于 2019-07-05T12:51:45.940 回答