一张数据表 r 记录抄表数据(可以理解为电表、水表),一张用户表 u 记录用户信息,r.uId = u.Id 。r表中有本次抄表thisR,上次抄表lastR,前次抄表preR等;u表中有Id,用户名称name等。
每个用户两个月抄一次(每个用户抄表时间不一样,比如5月份抄表的4月份没抄,4月份抄的6月份抄),现在的问题是:
查询出连续两次没有抄到表的用户。好学若饥
谢谢!

解决方案 »

  1.   

    结果我这里也没有,可以随便构造一些数据。刚才忘说了,r 表里还有一个抄表时间 dateR。谢谢!
      

  2.   

    select * 
    from r 
    where (thisR is null and lastR is null) 
           or (lastR is null and preR is null)
      

  3.   

    很感谢您的回复!这几天一直在出差,所以没有时间看。
    您这个方法我试了查询的结果也不对,我们的系统是将两次抄表没有抄到的用户做个标记,之前有人用了一种方法,分别查询两次:
    select *
      FROM u
     WHERE EXISTS (SELECT 'X'
              FROM r
             WHERE r.uId= u.Id
               AND thisR IS NULL
               AND dateR LIKE '201104%') 
       AND EXISTS (SELECT 'X'
              FROM r
             WHERE r.uId = u.Id
               AND thisR IS NULL
               AND dateR LIKE '201102%');  select *
              FROM u
     WHERE EXISTS (SELECT 'X'
              FROM r
             WHERE r.uId= u.Id
               AND thisR IS NULL
               AND dateR LIKE '201103%')
       AND EXISTS (SELECT 'X'
              FROM r
             WHERE r.uId = u.Id
               AND thisR IS NULL
               AND dateR LIKE '201101%');
    注:每个用户隔一个月抄一次表。因为现在是5月份,所以就在4月和2月或者3月和1月中查询没有抄到表的用户。最后分别将两次查询的用户设置标记。