将某一时间间隔内的记录,看成一条记录 select min(ID),UserNo,min(Time)from 记录集group by UserNo,ROUND(Time * 24 * 360, 0) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 select min(id),UserNo,convert(varchar(18),Time,120),min(Time) from 记录集 group by UserNo,convert(varchar(18),Time,120) SELECT MIN(ID) AS ID, UserNo, MIN([Time]) AS TimeFROM 表GROUP BY UserNo, ROUND(CAST([Time] AS float) * 24 * 360, 0) declare @ table(b int ,a varchar(10),t varchar(12))insert @ values(1,'0001','13:20:10')insert @ values(2,'0001','13:20:11')insert @ values(3,'0001','13:20:12')insert @ values(4,'0001','13:20:14')insert @ values(5,'0001','13:20:19')insert @ values(6,'0001','13:20:25')insert @ values(7,'0001','13:20:29')insert @ values(8,'0001','13:20:35')insert @ values(9,'0001','13:20:39')select min(b),min(t) from @ group by left(t,5),round(cast(right(t,2) as int) -5,-1)----------- ------------ 1 13:20:106 13:20:258 13:20:35 orselect min(b),min(t) from @ group by left(t,7 ) declare @ table(b int ,a varchar(10),t varchar(12))insert @ values(1,'0001','13:20:10')insert @ values(2,'0001','13:20:11')insert @ values(3,'0001','13:20:12')insert @ values(4,'0001','13:20:14')insert @ values(5,'0001','13:20:19')insert @ values(5,'0001','13:20:20')insert @ values(6,'0001','13:20:25')insert @ values(7,'0001','13:20:29')insert @ values(8,'0001','13:20:35')insert @ values(9,'0001','13:20:39')select min(b),min(t) from @ group by left(t,5),round(cast(right(t,2) as int) -6,-1)----------- ------------ 1 13:20:102 13:20:116 13:20:258 13:20:35 declare @ table(b int ,a varchar(10),t varchar(12))insert @ values(1,'0001','13:20:10')insert @ values(2,'0001','13:20:11')insert @ values(3,'0001','13:20:12')insert @ values(4,'0001','13:20:14')insert @ values(5,'0001','13:20:19')insert @ values(5,'0001','13:20:20')insert @ values(5,'0001','13:20:21')insert @ values(5,'0001','13:20:22')insert @ values(6,'0001','13:20:24')insert @ values(5,'0001','13:20:25')insert @ values(7,'0001','13:20:29')insert @ values(8,'0001','13:20:35')insert @ values(9,'0001','13:20:39')insert @ values(5,'0001','13:20:40')select min(b),min(t) from @ group by left(t,5),round(cast(right(t,2) as int) -5,-1)/*----------- ------------ 1 13:20:105 13:20:208 13:20:355 13:20:40(所影响的行数为 4 行)*/ select min(b),min(t) from @ group by left(t,5),round(cast(right(t,2) as int) -6,-1)/*----------- ------------ 1 13:20:102 13:20:11--这里困难5 13:20:215 13:20:35*/ 进行round以后怎么会出现35呢? 不过有一个问题,以什么为基准时间点呢?======================================按你的说法,是从最初插入的一条记录的时间开始。采用触发器的方式,没有改变这个规则。而且,等于是要先插入,然后进行判断,不行的话,在回滚====================================================不对,触发器先用inserted中的值判断。此时还没有真正地执行插入。 说句实话,楼上(“0距离”)说的,采用硬件的方式,就很容易解决这个问题了的确是用硬件采集数据的,就像交通一卡通这种,防止了在很短的时间内,采集了重复的垃圾数据。但是以前的硬件没做好,不支持,只好现在采用软方式去弥补~~~~可能用一句SQL是很难做到这个效果,但是加上其他处理是可以的 我执行一个更新后,如何知道我更新了哪几条记录? 2000中没有Password policy吗? print 打印游标变量中日期类型的无奈问题!请帮帮我! 求一存储过程。根据出生年月日得出年龄,要求精确到岁,月,日 表的查询问题,高手进 关于分组递增的问题,请指教,谢谢。 如何使数据库在到达一个指定的日期时自动更新一个表? 在SQL里建立的表能否 横着 查询 SQL Server 2000 能够承受的访问量和数据量? 急需报表控件 怎样减小数据库的日志文件? 关于如何阻止SQL-Server系统提示
FROM 表
GROUP BY UserNo, ROUND(CAST([Time] AS float) * 24 * 360, 0)
declare @ table(b int ,a varchar(10),t varchar(12))
insert @ values(1,'0001','13:20:10')
insert @ values(2,'0001','13:20:11')
insert @ values(3,'0001','13:20:12')
insert @ values(4,'0001','13:20:14')
insert @ values(5,'0001','13:20:19')
insert @ values(6,'0001','13:20:25')
insert @ values(7,'0001','13:20:29')
insert @ values(8,'0001','13:20:35')
insert @ values(9,'0001','13:20:39')select min(b),min(t) from @ group by left(t,5),round(cast(right(t,2) as int) -5,-1)
----------- ------------
1 13:20:10
6 13:20:25
8 13:20:35
select min(b),min(t) from @ group by left(t,7 )
insert @ values(1,'0001','13:20:10')
insert @ values(2,'0001','13:20:11')
insert @ values(3,'0001','13:20:12')
insert @ values(4,'0001','13:20:14')
insert @ values(5,'0001','13:20:19')
insert @ values(5,'0001','13:20:20')
insert @ values(6,'0001','13:20:25')
insert @ values(7,'0001','13:20:29')
insert @ values(8,'0001','13:20:35')
insert @ values(9,'0001','13:20:39')select min(b),min(t) from @ group by left(t,5),round(cast(right(t,2) as int) -6,-1)
----------- ------------
1 13:20:10
2 13:20:11
6 13:20:25
8 13:20:35
insert @ values(1,'0001','13:20:10')
insert @ values(2,'0001','13:20:11')
insert @ values(3,'0001','13:20:12')
insert @ values(4,'0001','13:20:14')
insert @ values(5,'0001','13:20:19')
insert @ values(5,'0001','13:20:20')
insert @ values(5,'0001','13:20:21')
insert @ values(5,'0001','13:20:22')
insert @ values(6,'0001','13:20:24')
insert @ values(5,'0001','13:20:25')
insert @ values(7,'0001','13:20:29')
insert @ values(8,'0001','13:20:35')
insert @ values(9,'0001','13:20:39')
insert @ values(5,'0001','13:20:40')select min(b),min(t) from @ group by left(t,5),round(cast(right(t,2) as int) -5,-1)
/*
----------- ------------
1 13:20:10
5 13:20:20
8 13:20:35
5 13:20:40(所影响的行数为 4 行)
*/
----------- ------------
1 13:20:10
2 13:20:11--这里困难
5 13:20:21
5 13:20:35
*/
======================================
按你的说法,是从最初插入的一条记录的时间开始。采用触发器的方式,没有改变这个规则。
而且,等于是要先插入,然后进行判断,不行的话,在回滚
====================================================
不对,触发器先用inserted中的值判断。此时还没有真正地执行插入。
的确是用硬件采集数据的,就像交通一卡通这种,防止了在很短的时间内,采集了重复的垃圾数据。但是以前的硬件没做好,不支持,只好现在采用软方式去弥补~~~~
可能用一句SQL是很难做到这个效果,但是加上其他处理是可以的