表名:TableName
字段名:Userid,V1,V2,V3,V4,V5,DacTime
查询昨天00:00整到23:59的数据 并判断每小时的数据条数是不是等于大于3条 小于三条的
话 就查询那个小时内的Userid是不是等于1,2,3 如果只有1,2 就查询上小时内的三条数据
吧Userid=3的数据插入到Userid只有1,2的时段内 DacTime修改为现在的时间
if (select Count(*) from TableName where DacTime >= '2017-01-12 0:00:00' AND DacTime<'2017-01-12: 01:00:00')<3
insert into TableName(UserID,V1,V2,V3,V4,V5,DatTime) Select Top 1 UserID ,V1,V2,V3,V4,V5,'2017-01-12 0:59:59' from TableName where UserID = 3
没到数据库调试你自己调试一下,大概语句就是这样,然后再复制23次,把每个小时都改一下。然后你第二天还要执行的话,只要批量替换日期就可以了。更高级的语句坐等大神分享。
对你的描述有如下问题:
1.DacTime是否用来保存记录的插入时间?
2.“如果只有1,2 就查询上小时内的三条数据吧Userid=3的数据插入到Userid只有1,2的时段内 DacTime修改为现在的时间“,
如果第一个问题的答案为“是”的话,你这样操作后,再次查询依然会存在小于3条的时间段。是否应该”修改为插入时间段的小时“?
如果我的理解没有错误的话,每个小时内插入数据最多3条,UserID分别为1,2,3,会一次插入且不会重复。
可以把需求修改如下:
表名:TableName
字段名:Userid,V1,V2,V3,V4,V5,DacTime
DacTime记录数据插入时间
将昨天0:00到23:59时间段内的数据按DacTime的小时数进行分组统计,如果A小时内(A:00-A:59)没有UserID=3的数据,就将A-1小时内UserID=3的数据复制插入数据库,DacTime的小时修改为A。
最终目的是保证每个时间段内都有三条数据。