如何避免基于唯一键和servertimestamp的重复值

n53p2ov0  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(347)

如果两个唯一列的servertimestamp相差15秒,我尝试编写一个查询,用0更新重复值。

id  D_Id             value serverTimeStamp
1   001               1    2016-10-05 23:37:02
2   002               1    2016-10-05 23:37:04
3   001               1    2016-10-05 23:52:24
4   002               1    2016-10-05 23:55:24
5   001               1    2016-10-06 00:29:09
6   002               1    2016-10-06 00:29:11
7   002               1    2016-10-06 01:56:51
8   001               1    2016-10-06 01:56:58

期望输出:

id  D_Id             value serverTimeStamp
1   001               1    2016-10-05 23:37:02
2   002               0    2016-10-05 23:37:04
3   001               1    2016-10-05 23:52:24
4   002               1    2016-10-05 23:55:24
5   001               1    2016-10-06 00:29:09
6   002               0    2016-10-06 00:29:11
7   002               1    2016-10-06 01:56:51
8   001               0    2016-10-06 01:56:58

如何通过查询实现这一点?

n3ipq98p

n3ipq98p1#

你可以试试这个:

UPDATE your_table YT
INNER JOIN 
(
    SELECT 
    id,
    D_Id,
    value,
    serverTimeStamp,
    @prevTimeStamp AS prevTimeStamp,
    @prevTimeStamp := serverTimeStamp
    FROM your_table
    CROSS JOIN (SELECT @prevTimeStamp := NULL) AS var
    ORDER BY serverTimeStamp
) AS x 
ON YT.id = x.id
SET YT.value = 0
WHERE TIMESTAMPDIFF(SECOND,x.prevTimeStamp,YT.serverTimeStamp) <= 15;

根据时间的升序对记录进行排序。
将前一行的servertimestamp值存储在用户定义的变量中。
现在在您的表和上面排序的表之间建立一个内部联接(使用前一行的时间戳)。
最后更新 value 归零( 0 )只有谁的记录 previousTimeStamp15serverTimeStamp

相关问题