关于连续登录的问题探究

经常会在数据统计中取筛选连续性的数据,比如筛选连续三个月都登录的用户,

数据形式如下:

1 111 222 333
2 111
3 111 222
4 111 444   

大体的意思就是1 2 3 4代表月份1,2,3,4

111,222,333,444代表用户

1 111 222 333 代表一月份用户111 222 333登录了。

以此类推

如果要查找连续三个月登录的用户,我把数据结构进行了改进

1 111
1 222
1 333
2 111
3 111
3 222
4 111
4 444

这样就更符合关系型了。

我简单模拟了下。

SQL> create table test(id1 number,id2 number);
Table created.
SQL> select id2,id1 from test;
       ID2        ID1
---------- ----------
       111          1
       222          1
       333          1
       111          2
       111          3
       222          3
       111          4
       444          4
--利用最大月份 减去 最小月份 +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
  3  /
       ID2   MAX(ID1)   MIN(ID1)   COUNT(*) MAX(ID1)-MIN(ID1)+1
---------- ---------- ---------- ---------- -------------------
       111          4          1          4                   4
       222          3          1          2                   3
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
---------- ---------- ---------- ---------- -------------------
       111          4          1          4                   4
       222          3          1          2                   3
       333          1          1          1                   1
       444          4          4          1                   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
  2  /
       ID2   MAX(ID1)   MIN(ID1)   COUNT(*) MAX(ID1)-MIN(ID1)+1
---------- ---------- ---------- ---------- -------------------
       111  

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-03-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏飞扬的花生

jsencrypt参数前端加密c#解密

      写程序时一般是通过form表单或者ajax方式将参数提交到服务器进行验证,如何防止提交的请求不被抓包后串改,虽然无法说绝对安全却给非法提交提高了难度...

3889
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2586
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2192
来自专栏魂祭心

原 canvas绘制clock

4174
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6998
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4878
来自专栏跟着阿笨一起玩NET

c#实现打印功能

2822
来自专栏落花落雨不落叶

canvas画简单电路图

63411
来自专栏芋道源码1024

熔断器 Hystrix 源码解析 —— 断路器 HystrixCircuitBreaker

本文主要基于 Hystrix 1.5.X 版本 1. 概述 2. HystrixCircuitBreaker 3. HystrixCircuitBreaker....

5367
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2607

扫码关注云+社区