如果两个唯一列的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
如何通过查询实现这一目标?
答案 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