【问题标题】:Increment Time for every 10 Row using update in MySQL在 MySQL 中使用更新每 10 行的增量时间
【发布时间】:2015-12-08 05:30:35
【问题描述】:

需要一个 mysql 更新查询来将每 10 行的时间增加 6 秒,第一个条目时间从特定日期时间开始...

假设2015-12-08 00:00:00 是我想要的前 10 个条目的时间戳, 接下来的 10 个条目应该得到 2015-12-08 00:00:06,

接下来的10-

2015-12-08 00:00:12

接下来的 10 个

2015-12-08 00:00:18

...等到最后一个条目,时间必须增加 6 秒,因此 minuteshours 会增加直到最后一个条目

知道如何为此进行更新查询吗?

PS:我在表中的任何列中都没有唯一的 id 或值,这些值可能会重复。我更喜欢使用更新语句,因为我可能也必须更改其他表,而不是触发器或存储过程。我正在使用 MySQL v7.02 SQLyog Enterprise

【问题讨论】:

  • 在 MySQL 数据库内部没有“下一个 10”的真正概念。有任何东西可以用来订购吗?
  • @TimBiegeleisen 我确实有另一个日期字段,我可以通过它订购表格..让我们说start_time
  • 即使有人给你一个查询,你仍然会面临维护表的问题。以后添加新记录时会发生什么?
  • @TimBiegeleisen 我正在考虑每次使用查询更新它。因为我可能不会定期在表中获取新数据

标签: mysql sql sql-update


【解决方案1】:

希望以下陈述对您有所帮助:

select
 @row_n := @row_n + 1 as row_no
, case when MOD(@row_n,10) =0 then @time:= ADDTIME(@time,'00:06') else @time end
  from [your_table]
   JOIN  (SELECT @row_n := 0) r 
   JOIN  (SELECT @time := now()) t

更新语句示例:

update tableA set dateCol=nestedTable.colB
from (
  select
   tableB.[some key]
 ,  @row_n := @row_n + 1 as row_no
 , (case when MOD(@row_n,10) =0 then @time:= ADDTIME(@time,'00:06') else @time end ) as colB
  from tableB
   JOIN  (SELECT @row_n := 0) r 
   JOIN  (SELECT @time := now()) t
 ) nestedTable
 where tableA.[some key] = nestedTable.[some key]

【讨论】:

  • 将 now() 替换为 '2015-12-08 00:00:12'
  • 所以更新它会像:Update Table_Name set Date_Column= select dt from (select @row_n := @row_n + 1 as row_no , case when MOD(@row_n,10) =0 then @time:= ADDTIME(@time,'00:06') else @time end as dt from [your_table] JOIN (SELECT @row_n := 0) r JOIN (SELECT @time := '2015-12-08 00:00:00') t)
  • 你要定义[Table_Name]和[your_table]的匹配键,例如:
  • 我为 [Table_Name] 和 [your_table] 定义了相同的 tableName,但它给出了:Error Code : 1242 Subquery returns more than 1 row 我使用了以下更新查询:update Table_Name` set Date_Column= (select dt from (select @ row_n := @row_n + 1 as row_no ,当 MOD(@row_n,10) =0 然后 @time:= ADDTIME(@time,'00:06') else @time end as dt from Table_Name JOIN (SELECT @row_n := 0) r JOIN (SELECT @time := '2015-12-08 00:00:00') t1) t2)`
  • 你必须定义[Table_Name] 和[your_table] 之间的匹配键,例如:update tableA set dateCol=nestedTable.colB from ( select tableB.[some key] , @row_n := @row_n + 1 as row_no , (case when MOD(@row_n,10) =0 then @time:= ADDTIME(@time,'00:06') else @time end ) as colB from tableB JOIN (SELECT @row_n := 0) r JOIN (SELECT @time := now()) t ) nestedTable where tableA.[some key] = nestedTable.[some key] 确保映射是一对一的,否则你的更新查询不能每次都得到正确的结果时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 1970-01-01
  • 2019-03-04
  • 2016-02-05
  • 2011-01-16
  • 2020-05-12
相关资源
最近更新 更多