2 u011954277 u011954277 于 2017.01.13 16:01 提问

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

u011954277
u011954277 可能缺1或者2或者1,都缺的
11 个月之前 回复
u011954277
u011954277 Userid不能保证每次都是缺Userid=3的 有时候是1,3 或者只有1的
11 个月之前 回复
lxf2580
lxf2580   2017.01.13 16:38

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

u011954277
u011954277 嗯 需要保证每小时三条数据量 并且Userid分别为1,2,3
11 个月之前 回复
lxf2580
lxf2580 如果我的理解没有错误的话,可以把需求修改如下:
11 个月之前 回复
lxf2580
lxf2580   2017.01.13 16: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。
最终目的是保证每个时间段内都有三条数据。

u011954277
u011954277 可以写条例子看看吗?
11 个月之前 回复
lxf2580
lxf2580 我目前能想到的就是写24条语句,依次执行。
11 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!