【问题标题】:MYSQL check the value of the next rowMYSQL检查下一行的值
【发布时间】:2013-10-10 10:57:49
【问题描述】:

我有一个像这样的表'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分钟的时间。

我认为我能做到这一点的唯一方法是获取一条记录的日期时间,然后检查下一行中的记录,如果两者相同,则添加 5 分钟。 如何获取下一行的值并将其与上一行进行比较?

谁能帮我解决这个问题?

谢谢

【问题讨论】:

  • 您在 00:30:00 有四个条目。执行您的建议将在 00:30、00:35、00:40 和 00:45 为您提供条目 - 而您已经在 00:45 有条目。您需要恢复上次备份(您确实有备份吗?)并再次执行更新。
  • 我没有备份 :(...但这不是问题...我只有 2 个重复值而不是 3 个...我会更新我的问题...请分享如果你能帮助我,请回答...

标签: mysql


【解决方案1】:

此查询将输出新的日期时间值,其中我每次日期时间与上一行相同时添加 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)之间的 ID 值差值相加 5 倍。

虽然这肯定会满足您的需求,但取决于您如何舍入到 15 分钟,输出不一定与您从原始数据舍入到 5 分钟时的结果相同。您最好的选择是从备份中恢复。

【讨论】:

  • 太好了...感谢您的回答...它对我来说很好...我可以根据需要选择 dateTime 但我正在努力更新 dateTime...它给了我一个错误Error Code: 1093. You can't specify target table 'mytable' for update in FROM clause
  • 我建议您使用我上面的查询来使用更新的值填充临时表。然后就可以从临时表中更新原表了。
猜你喜欢
  • 2013-02-25
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 2017-01-08
  • 1970-01-01
相关资源
最近更新 更多