在任何时刻某个时间(如5分钟)范围内如果连续签到,如何取第一笔或最后一笔?比如1000002在07:30到07:32分钟内连续签到3笔,我想取第一笔或最后一笔有效。0 1000002 2012-04-10 07:00:18.000 4 0 2012-04-10 16:42:38.500
2 1000002 2012-04-10 07:30:03.000 4 0 2012-04-10 16:42:38.560
8 1000002 2012-04-10 07:31:03.000 4 0 2012-04-10 16:43:05.890
9 1000002 2012-04-10 07:32:03.000 4 0 2012-04-10 16:43:11.373
1 1000002 2012-04-10 08:00:11.000 4 0 2012-04-10 16:42:38.560
3 1000002 2012-04-10 17:30:21.000 4 0 2012-04-10 16:42:38.560
4 1000002 2012-04-10 18:00:24.000 4 0 2012-04-10 16:42:38.560
10 1000002 2012-04-10 18:01:24.000 4 0 2012-04-10 16:43:23.590
11 1000002 2012-04-10 18:02:24.000 4 0 2012-04-10 16:43:29.390
5 1000002 2012-04-10 18:30:12.000 4 0 2012-04-10 16:42:38.560
7 1000002 2012-04-10 18:31:11.000 4 0 2012-04-10 16:42:38.560
6 1000002 2012-04-10 18:31:32.000 4 0 2012-04-10 16:42:38.560

解决方案 »

  1.   

    seelct * from(
    select *,
    row_number()over(partition by 1000002所在的字段名 order by [date] desc)as id from tbl)a
    where id=1
      

  2.   

    select top 1 user_id ,date_time from tb where date_time between '2012-04-10 13:00:00' and '2012-04-10 13:50:00' and user_id='1000002' order by date_time desc
      

  3.   

    select *
    from tb t
    where not exists(select 1 from tb where id=t.id and datediff(mm,time,t.time)<5)这个是取第一笔的,没有进行测试
      

  4.   

    select max(date1), min(date2) from tb 
    where no='1000002' 
    and 时间范围自己写
      

  5.   

    select * from TimeRecords a where a.Sign_DateTime =(select min(b.Sign_DateTime) from TimeRecords b 
    where a.Card_ID=b.Card_ID and DateDiff(Mi,a.Sign_DateTime,b.Sign_DateTime)<=0 and DateDiff(Mi,a.Sign_DateTime,b.Sign_DateTime)>=-5)
    select * from TimeRecords a where a.Sign_DateTime =(select max(b.Sign_DateTime) from TimeRecords b 
    where a.Card_ID=b.Card_ID and DateDiff(Mi,a.Sign_DateTime,b.Sign_DateTime)>=0 and DateDiff(Mi,a.Sign_DateTime,b.Sign_DateTime)<=5)