一张数据表 r 记录抄表数据(可以理解为电表、水表),一张用户表 u 记录用户信息,r.uId = u.Id 。r表中有本次抄表thisR,上次抄表lastR,前次抄表preR等;u表中有Id,用户名称name等。
每个用户两个月抄一次(每个用户抄表时间不一样,比如5月份抄表的4月份没抄,4月份抄的6月份抄),现在的问题是:
查询出连续两次没有抄到表的用户。
好学若饥
谢谢!
...全文
13313打赏收藏
急!急!急!一个查询问题,谢谢!!!
一张数据表 r 记录抄表数据(可以理解为电表、水表),一张用户表 u 记录用户信息,r.uId = u.Id 。r表中有本次抄表thisR,上次抄表lastR,前次抄表preR等;u表中有Id,用户名称name等。 每个用户两个月抄一次(每个用户抄表时间不一样,比如5月份抄表的4月份没抄,4月份抄的6月份抄),现在的问题是: 查询出连续两次没有抄到表的用户。 好学若饥 谢谢!
[Quote=引用 9 楼 yejihui9527 的回复:]
select *
from r
where (thisR is null and lastR is null)
or (lastR is null and preR is null)
[/Quote]
这个查询语句还需要看楼主在没有抄表的情况下是否在表中产生记录,如果产生记录执行的结果应当是对的,如果不产生记录,就会漏掉本次及上次没有抄表的情况,楼主可以进一步考虑
[Quote=引用 9 楼 yejihui9527 的回复:]
select *
from r
where (thisR is null and lastR is null)
or (lastR is null and preR is null)
[/Quote]
很感谢您的回复!这几天一直在出差,所以没有时间看。
您这个方法我试了查询的结果也不对,我们的系统是将两次抄表没有抄到的用户做个标记,之前有人用了一种方法,分别查询两次:
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月中查询没有抄到表的用户。最后分别将两次查询的用户设置标记。