字段:
sid,sname,dTime,sDoSome结果:
需要查询出同一sname按dTime(时间先后顺序)最近连续3次sDoSome字段为空的记录我粗俗的思维是:
想按sname分组,然后用dTime来排序,但是最近连续3次为空这个怎么判断啊?求大侠们指点迷津了
想了整整一天

解决方案 »

  1.   


    SELECT DISTINCT sname
    FROM
    (select sname,sDoSome , lag(sDoSome ,1) over(partition by snameorder by dTime) one,lag(sDoSome ,2) over(partition by sname order by dTime) two
    from (SELECT ROW_NUMBER() OVER(PARTITION BY snameORDER BY dTime) RN,TEST.* FROM TEST)
    where RN>1)
    WHERE (sDoSome IS NULL) AND (ONE IS NULL) AND (TWO IS NULL)
      

  2.   

    可以先查询出每个sname的最近连续3条记录,然后从中找出sDoSome均为null的记录 :
    语句没有调试,可能存在问题,但大体 意思就是上面所说:
    select sid, sname, count(*) from
    (select sid,sname,sDoSome,row_number()(partition by sname order by dtime desc) r
    from table
    where r<=3) 
    where sDoSome is null
    group by sid,sname having count(*)=3;
      

  3.   


    cheng_fengming :
    如果单单是为空倒是很好办  但是是3次并且是连续的  就不好弄了!RE: 确实,哈哈,我脑子不太好使---------------------------------------------randy_ideal:
    不是很明白楼主的意图,能举例说明吗?RE: 就是如果相同sname有最近3次(按dTime)记录doSome是空的话就筛选出来