我有一个像'mytable'这样的表
ID | dateTime | data |
------------------------------------------
1 | 2013-09-01 00:15:00 | some data |
2 | 2013-09-01 00:15:00 | some data |
4 | 2013-09-01 00:15:00 | some data |
5 | 2013-09-01 00:30:00 | some data |
6 | 2013-09-01 00:30:00 | some data |
7 | 2013-09-01 00:30:00 | some data |
8 | 2013-09-01 00:45:00 | some data |
9 | 2013-09-01 00:45:00 | some data |
10 | 2013-09-01 00:45:00 | some data |
之前我没事,但是我不小心将dateTime更改为15分钟(我本来应该绕5分钟)请参考this,不,我想要将时间缩短5分钟。< / p>
我认为我能做到这一点的唯一方法是获取一条记录的日期时间然后检查下一行的记录,如果两条记录相同则再添加5分钟。 如何获取下一行的值并将其与之前的行进行比较?
任何人都可以帮我解决这个问题吗?
由于
答案 0 :(得分:0)
此查询将输出新的日期时间值,每当datetime与上一行相同时,我会添加5分钟,按Id排序:
SELECT ID,
DATE_ADD(dateTime, INTERVAL 5 * (ID -
(SELECT MIN(ID) FROM MyTable T2 WHERE T2.dateTime = T1.dateTime)
) MINUTE) AS dateTime,
data
)
FROM MyTable T1
它的工作原理是在当前行和同一dateTime值的第一行(最小ID)之间添加5倍的ID值差异。
虽然这肯定会做你想要的,但取决于你向下舍入到15分钟的方式,输出不一定与从原始数据向下舍入到5分钟的输出相同。您最好的选择是从备份恢复。