MySQL:如何为具有接近时间戳的记录分配相同的ID

标签 mysql sql

我有一个带有时间戳列 t 的 MySQL 表。我需要创建另一个整数列(groupId),它对于带有时间戳的记录具有相同的值 相差不到 3 秒。我的 MySQL 版本不支持窗口函数。这是第二列的预期输出:

+---------------------+--------+
|  t                  | groupId|
+---------------------+--------+
| 2017-06-17 18:15:13 |      1 |
| 2017-06-17 18:15:14 |      1 |
| 2017-06-17 20:30:06 |      2 |
| 2017-06-17 20:30:07 |      2 |
| 2017-06-17 22:44:58 |      3 |
| 2017-06-17 22:44:59 |      3 |
| 2017-06-17 23:59:50 |      4 |
| 2017-06-17 23:59:51 |      4 |

我尝试使用自连接和 TIMESTAMPDIFF(SECOND,t1,t2) <3

但我不知道如何生成唯一的groupId。

附言 数据的性质保证了不存在超过 3 秒的连续范围

最佳答案

您可以使用变量来做到这一点。

select tm 
,@diff:=timestampdiff(second,@prev,tm)
,@prev:=tm
,@grp:=case when @diff<3 or @diff is null then @grp else @grp+1 end as groupID
from t
cross join (select @prev:='',@diff:=0,@grp:=1) r
order by tm

关于MySQL:如何为具有接近时间戳的记录分配相同的ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45260291/

相关文章:

mysql - 使用mysql计算两个值的差异并根据结果进行排序

mysql - 如何使用 CASE..WHEN 检查子查询结果?

mysql - 只能使用 --skip-grant-tables 参数访问 mySQL(检查所有其他线程)

mysql - 尝试创建 sql 表但显示错误

mysql - 如何仅在MYSQL 中不存在数据时才插入数据?

mysql - SQL:将相关表中的所有数据添加到列中

mysql - 在 OSX 中挂载 Docker 卷时权限被拒绝

mysql - mysql 映射

sql - INSERT IF NOT EXISTS 类型函数供我使用而不将列转换为主键?

mysql - 将增量值合并到此 sql 中