mysql - 根据重复事件将具有序列数据的列添加到表中
问题描述
我正在学习 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 8.0 中,您可以简单地ROW_NUMBER()
为此目的使用窗口函数:
SELECT
t.*,
ROW_NUMBER() OVER(PARTITION BY customerID, ActivityType ORDER BY Sequence) recur
FROM mytable t
注意:正如 Strawberry 所说,将该信息存储在附加列中没有多大意义,因为维护起来可能很复杂:例如,如果您的表已更新,您可能需要重新计算整个列。您最好在查询表时即时计算信息。
推荐阅读
- r - 我如何在文件夹中列出所有带有 .nc (netcdf) 的文件并从 10 个变量中提取 1 个变量?
- python - Python:无法从字符串转换为浮点数
- postgresql - Postgres 中的奇怪异常处理
- minecraft - 给定选择中所有块的坐标 - Minecraft
- python-3.x - 具有多个影响类别的 MultiMonteCarlo
- python - scrapy:如何同时进行
- 和
- 逐个?
- java - 通过 Java 将 sqlite 数据库连接到 http 服务器
- c# - Autofac 注入通用接口的 IEnumerable
- python - 如何从 openstack shade 转移到 openstacksdk?
- kubernetes - Keycloak 网守 HTTP 502 / 10 秒后超时