select min(ID),UserNo,min(Time)
from 记录集
group by UserNo,ROUND(Time * 24 * 360, 0)

解决方案 »

  1.   

    select min(id),UserNo,convert(varchar(18),Time,120),min(Time) from 记录集 group by UserNo,convert(varchar(18),Time,120)
      

  2.   

    SELECT MIN(ID) AS ID, UserNo, MIN([Time]) AS Time
    FROM 表
    GROUP BY UserNo, ROUND(CAST([Time] AS float) * 24 * 360, 0)
      

  3.   


    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
      

  4.   

    or
    select min(b),min(t) from @ group by left(t,7 )
      

  5.   

    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:10
    2           13:20:11
    6           13:20:25
    8           13:20:35
      

  6.   

    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:10
    5           13:20:20
    8           13:20:35
    5           13:20:40(所影响的行数为 4 行)
    */
      

  7.   

    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--这里困难
    5           13:20:21
    5           13:20:35
    */
      

  8.   

    进行round以后怎么会出现35呢?
      

  9.   

    不过有一个问题,以什么为基准时间点呢?
    ======================================
    按你的说法,是从最初插入的一条记录的时间开始。采用触发器的方式,没有改变这个规则。
    而且,等于是要先插入,然后进行判断,不行的话,在回滚
    ====================================================
    不对,触发器先用inserted中的值判断。此时还没有真正地执行插入。
      

  10.   

    说句实话,楼上(“0距离”)说的,采用硬件的方式,就很容易解决这个问题了
    的确是用硬件采集数据的,就像交通一卡通这种,防止了在很短的时间内,采集了重复的垃圾数据。但是以前的硬件没做好,不支持,只好现在采用软方式去弥补~~~~
    可能用一句SQL是很难做到这个效果,但是加上其他处理是可以的