经常会在数据统计中取筛选连续性的数据,比如筛选连续三个月都登录的用户,
大体的意思就是1 2 3 4代表月份1,2,3,4
1 111 222 333 代表一月份用户111 222 333登录了。
如果要查找连续三个月登录的用户,我把数据结构进行了改进
SQL> create table test(id1 number,id2 number);
SQL> select id2,id1 from test;
--利用最大月份 减去 最小月份 +1 (不跨年的情况下),然后除去关联的月份数,如果是1,那就证明连续几个月就登录了
SQL> select id2,max(id1),min(id1),count(*),max(id1)-min(id1)+1 from test
2 group by id2 having (max(id1)-min(id1)+1)>2
ID2 MAX(ID1) MIN(ID1) COUNT(*) MAX(ID1)-MIN(ID1)+1
---------- ---------- ---------- ---------- -------------------
SQL> select id2,max(id1),min(id1),count(*),max(id1)-min(id1)+1 from test group by id2;
ID2 MAX(ID1) MIN(ID1) COUNT(*) MAX(ID1)-MIN(ID1)+1
---------- ---------- ---------- ---------- -------------------
一次延伸,如果要查询连续4个月的,那就更好办了。
连续4个月的 SQL> select id2,max(id1),min(id1),count(*),max(id1)-min(id1)+1 from test group by id2 having (max(id1)-min(id1)+1)/count(id1)=1 and count(id1)=
4 ID2 MAX(ID1) MIN(ID1) COUNT(*) MAX(ID1)-MIN(ID1)+1
---------- ---------- ---------- ---------- -------------------
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23718752/viewspace-772898/,如需转载,请注明出处,否则将追究法律责任。