我有一个带有时间戳列 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/