小菜来袭
2017-01-13 08:01
采纳率: 74.8%
浏览 1.6k

mss sqlserver 查询每小时的数据

表名: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修改为现在的时间

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • lxf2580 2017-01-13 09:04
    已采纳

    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次,把每个小时都改一下。然后你第二天还要执行的话,只要批量替换日期就可以了。更高级的语句坐等大神分享。

    已采纳该答案
    打赏 评论
  • lxf2580 2017-01-13 08:38

    对你的描述有如下问题:
    1.DacTime是否用来保存记录的插入时间?
    2.“如果只有1,2 就查询上小时内的三条数据吧Userid=3的数据插入到Userid只有1,2的时段内 DacTime修改为现在的时间“,
    如果第一个问题的答案为“是”的话,你这样操作后,再次查询依然会存在小于3条的时间段。是否应该”修改为插入时间段的小时“?

    打赏 评论
  • lxf2580 2017-01-13 08:49

    如果我的理解没有错误的话,每个小时内插入数据最多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。
    最终目的是保证每个时间段内都有三条数据。

    打赏 评论

相关推荐 更多相似问题