MySQL - 如何将重复 ID 的出现次数添加到行中

标签 mysql count duplicates sql-update windows-10

我需要填写出现次数。表定义包含全部三列,原始数据包含 2 列。

ID | EventDate/Time | OccurrenceNumber
-----------------------------
1  | 1/11/2017      | 1
2  | 1/12/2017      | 1
3  | 1/15/2017      | 1
2  | 1/17/2017      | 2
4  | 1/18/2017      | 1
...

数据在读入 MySQL(.csv 数据文件)之前先按事件日期(唯一/时间戳)和 ID 进行预排序(原始),并且需要以一致的方式确定出现次数字段接着就,随即。 (第二次发生在时间上是第二次。)

最佳答案

如果每个 ID 的日期都是唯一的,那么您可以使用以下查询来获取出现次数。基于将 EventDate 与同一个表匹配

select a.*,
(
  select count(*)
  from demo b
  where a.ID = b.ID
  and b.EventDate < a.EventDate // edit updated criteria 
) +1 OccurrenceNumber
from demo a
order by a.ID,a.EventDate desc

DEMO

对于更新,假设 demo2 是要更新的目标表,那么您可以将更新查询编写为

update demo2 b1
join (
select a.*,
(
  select count(*)
  from demo b
  where a.ID = b.ID
  and b.EventDate < a.EventDate
) +1 OccurrenceNumber
from demo a
) a1 on (b1.ID = a1.ID and b1.EventDate = a1.EventDate)
set b1.OccurrenceNumber = a1.OccurrenceNumber

DEMO

关于MySQL - 如何将重复 ID 的出现次数添加到行中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46452481/

相关文章:

python - 如何从列表中删除连续的重复项?

sql - 需要帮助识别表中的重复项

php - mysql中止连接——如何追查原因

mysql - 我可以在同一个查询中计算两个不同的事物吗?

java - Hibernate注解一对多关系映射的优化方式

sql - 简单查询优化

mysql - SQL SELECT 如何仅获取事件记录

xpath - 使用 xpath 查找重复的兄弟

php - 连接 mysql 中的两列并在下拉列表中显示不同的值

mysql - RxJava-Jdbc 0.5.7 : How to obtain last insert id?