比如我有一组数据,上下行时间只要差超过7天,就重新排序
张三 2012/1/1 
张三 2012/1/2 
张三 2012/1/4 
张三 2012/1/6 
张三 2012/1/7 
张三 2012/1/13 
张三 2012/1/21 
张三 2012/1/22 
张三 2012/2/1 
张三 2012/2/2 
张三 2012/2/3 
王五 2012/1/3 
王五 2012/1/5 
李四 2012/1/2 
得出的结果是
张三 2012/1/1 1 
张三 2012/1/2 2 
张三 2012/1/4 3 
张三 2012/1/6 4 
张三 2012/1/7 5 
张三 2012/1/13 6 
张三 2012/1/21 1 
张三 2012/1/22 2 
张三 2012/2/1 1 
张三 2012/2/2 2 
张三 2012/2/3 3 
王五 2012/1/3 1 
王五 2012/1/5 2 
李四 2012/1/2 1 
请问怎么实现

解决方案 »

  1.   

    create table tb(n nvarchar(10),dt datetime)
    insert into tb select '张三','2012/1/1' 
    insert into tb select '张三','2012/1/2' 
    insert into tb select '张三','2012/1/4' 
    insert into tb select '张三','2012/1/6' 
    insert into tb select '张三','2012/1/7' 
    insert into tb select '张三','2012/1/13' 
    insert into tb select '张三','2012/1/21' 
    insert into tb select '张三','2012/1/22' 
    insert into tb select '张三','2012/2/1' 
    insert into tb select '张三','2012/2/2' 
    insert into tb select '张三','2012/2/3' 
    insert into tb select '王五','2012/1/3' 
    insert into tb select '王五','2012/1/5' 
    insert into tb select '李四','2012/1/2' 
    go
    select *,row_number()over(partition by n,(datediff(d,'2012-01-01',dt)-1)/7 order by dt)rn from tb order by n,dt
    /*
    n          dt                      rn
    ---------- ----------------------- --------------------
    李四         2012-01-02 00:00:00.000 1
    王五         2012-01-03 00:00:00.000 1
    王五         2012-01-05 00:00:00.000 2
    张三         2012-01-01 00:00:00.000 1
    张三         2012-01-02 00:00:00.000 2
    张三         2012-01-04 00:00:00.000 3
    张三         2012-01-06 00:00:00.000 4
    张三         2012-01-07 00:00:00.000 5
    张三         2012-01-13 00:00:00.000 1
    张三         2012-01-21 00:00:00.000 1
    张三         2012-01-22 00:00:00.000 2
    张三         2012-02-01 00:00:00.000 1
    张三         2012-02-02 00:00:00.000 2
    张三         2012-02-03 00:00:00.000 3(14 行受影响)*/
    go
    drop table tb
      

  2.   

    select *,row=row_number()over(partition by n,(case when datediff(d,'2012-01-01',dt)>7 then 1 else 0 end) order by dt) from tb