首页 > 解决方案 > 根据重复事件将具有序列数据的列添加到表中

问题描述

我正在学习 MySQL(通过模式)并且正在接近高级部分。我有一个包含重复发生的事件的数据集,我想添加一个列来标识当天事件的第一次、第二次、第三次、第四次等(无限制)发生。

CustomerID     ActivityType     Day     Sequence
Adam           Inquiry          1       1
Barb           Inquiry          1       2
Adam           Inquiry          1       3
Charlie        Inquiry          1       4
Barb           Order            1       5
Charlie        Inquiry          1       6
Adam           Inquiry          1       7
Barb           Order            1       8

我在这里搜索了看起来相似的问题,以帮助我集中精力学习,但我没有看到任何完全相同的东西。

我想要的输出将与上面相同,但添加了一个列,显示客户和活动的重复组合的顺序,如下所示:

CustomerID     ActivityType     Day     Sequence  Recur
Adam           Inquiry          1       1         1
Barb           Inquiry          1       2         1
Adam           Inquiry          1       3         2
Charlie        Inquiry          1       4         1
Barb           Order            1       5         1
Charlie        Inquiry          1       6         2
Adam           Inquiry          1       7         3
Barb           Order            1       8         2

标签: mysql

解决方案


在 MySQL 8.0 中,您可以简单地ROW_NUMBER()为此目的使用窗口函数:

SELECT 
    t.*,
    ROW_NUMBER() OVER(PARTITION BY customerID, ActivityType ORDER BY Sequence) recur
FROM mytable t

注意:正如 Strawberry 所说,将该信息存储在附加列中没有多大意义,因为维护起来可能很复杂:例如,如果您的表已更新,您可能需要重新计算整个列。您最好在查询表时即时计算信息。


推荐阅读