在mysql表中循环查找表中缺少的一天

在mysql表中循环查找表中缺少的一天,mysql,sql,Mysql,Sql,我正在将csv文件上传到mysql表中 time_stamp,"Phase 1","Phase 2","Phase 3",Total 2014-07-09 07:59:21,8345,8665,5461,22471 2014-07-09 08:59:21,8345,8665,5461,22471 2014-07-10 07:59:57,9349,9750,6550,25649 我想运行一个循环,检查时间戳是否存在于两个时间段之间,比如7:59:59和8:59:59,它应该将前一个时间戳的值追加

我正在将csv文件上传到mysql表中

time_stamp,"Phase 1","Phase 2","Phase 3",Total
2014-07-09 07:59:21,8345,8665,5461,22471
2014-07-09 08:59:21,8345,8665,5461,22471
2014-07-10 07:59:57,9349,9750,6550,25649
我想运行一个循环,检查时间戳是否存在于两个时间段之间,比如7:59:59和8:59:59,它应该将前一个时间戳的值追加到表中

2014-07-09 08:29:21,8345,8665,5461,22471

编辑:间隔30分钟的解决方案:

select timestampadd(minute, 30, x.time_stamp) as time_stamp,
       x.phase_1,
       x.phase_2,
       x.phase_3,
       x.total
  from tbl x
 cross join tbl y
 where y.time_stamp =
       (select max(z.time_stamp)
          from tbl z
         where timestampdiff(minute, z.time_stamp, x.time_stamp) < 30)
   and timestampdiff(minute, y.time_stamp, x.time_stamp) not between 0 and
       29.99
   and y.time_stamp < (select max(time_stamp) from tbl)
小提琴:

1天间隔的解决方案:

insert into tbl
select timestampadd(day, 1, x.time_stamp) as time_stamp,
       x.phase_1,
       x.phase_2,
       x.phase_3,
       x.total
  from tbl x
 cross join tbl y
 where y.time_stamp =
       (select max(z.time_stamp)
          from tbl z
         where cast(z.time_stamp as date) < cast(x.time_stamp as date))
   and cast(y.time_stamp as date) < cast(x.time_stamp as date)
   and cast(timestampadd(day, 1, x.time_stamp) as date) not in
       (select cast(time_stamp as date) from tbl);
小提琴:


为了便于说明,我添加了一些额外的示例数据

是否有超过一天的间隔?我这样问是因为如果间隔总是保证只有一天,你可能不需要使用日期表就可以离开,但否则我认为你需要这样一个表。只有一天的间隔我的问题比这复杂得多,但感谢这一点,我可以在此基础上进一步发展。没问题,很高兴它给了你一个开始这项工作,如果我想查询30分钟之间@布瑞恩DeMilia@Bazinga777你是什么意思?如果有一天没有时间戳,上述查询将选择一行,该行的时间戳在前一天的最后一个时间戳之后24小时,其他列中的所有值都等于前一条记录。就这么多我现在改变了我的问题。很抱歉,你的代码工作正常,但我的问题有点变了。