关于连续登录的问题探究

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

数据形式如下:

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 条评论
登录 后参与评论

相关文章

来自专栏机器之心

教程 | 如何使用JavaScript构建机器学习模型

选自:hackernoon 作者:Abhishek Soni 参与:李泽南 目前,机器学习领域建模的主要语言是 Python 和 R,前不久腾讯推出的机器学习框...

3226
来自专栏大数据挖掘DT机器学习

R语言数据处理:飞机航行距离与到达延误时间有什么关系??

数据分析有一半以上的时间会花在对原始数据的整理及变换上,包括选取特定的分析变量、汇总并筛选满足条件的数据、排序、加工处理原始变量并生成新的变量、以及分组汇总数...

3464
来自专栏机器之心

教程 | 如何在Python中快速进行语料库搜索:近似最近邻算法

3314
来自专栏阮一峰的网络日志

数据压缩与信息熵

1992年,美国佐治亚州的WEB Technology公司,宣布做出了重大的技术突破。 该公司的DataFiles/16软件,号称可以将任意大于64KB的文件,...

3595
来自专栏GreenLeaves

SQL学习之联结表的使用

1、简介:"联结(join)表"是SQL最强大的功能之一。联结是利用SQL的SELECT能执行的最重要的操作,很好地理解联结及其语法是学习SQL的极为重要的部分...

1849
来自专栏一心无二用,本人只专注于基础图像算法的实现与优化。

VB.NET中图像处理的一些技巧以及其和C#图像处理的差距。

 早期的时候我使用的开发工具是VB6,VB6做图像处理的速度在我的软件Imageshop中有所体现,还是算可以的。目前,我已经改用C#来研究图像算法,C#中有...

1895
来自专栏机器学习和数学

[情人节] jieba分词介绍

jieba 分词我觉得是Python中文分词工具中最好用的一个工具包。想要入门自然语言处理,jieba分词有必要好好掌握一下,今天带大家入门一下jieba分词包...

45112
来自专栏ATYUN订阅号

使用Tensor2Tensor和10行代码训练尖端语言翻译神经网络

有许多库可以帮助人们构建深度学习应用程序,但如果想使用最新架构的最先进模型和最少的代码,有这样一个API脱颖而出:Google的Tensor2Tensor。我通...

1432
来自专栏章鱼的慢慢技术路

用OpenGL实现粒子的随机运动

1385
来自专栏数据结构与算法

逆元的三种解法(附详细证明)

友情提示: Latex加载稍慢,请耐心等待 什么是逆元? 若x满足 我们称x是a在 意义下的逆元 逆元的基本解法 https://loj.ac/pr...

6328

扫码关注云+社区