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

时间:2016-10-06 07:41:51

标签: mysql

如果两个唯一列的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

如何通过查询实现这一目标?

1 个答案:

答案 0 :(得分:1)

你可以尝试一下:

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只有previousTimeStamp 15秒内serverTimeStamp

的记录的Spring MVC