代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
PLSQL
】
通过分析函数实现求连续天数登陆的用户
作者:
淑臣
/ 发布于
2017/2/7
/
1181
通过分析函数实现求连续天数登陆的用户
首先给出一些样例数据: 用户ID 登陆时间(年) 登陆时间(月) 登陆时间(日) 1 2014 7 1 1 2014 7 2 1 2014 7 3 1 2014 7 3 1 2014 7 4 1 2014 7 5 1 2014 7 5 1 2014 7 7 1 2014 7 8 1 2014 7 9 1 2014 7 10 1 2014 7 11 1 2014 7 12 1 2014 7 13 1 2014 7 14 1 2014 7 14 1 2014 7 14 1 2014 7 15 1 2014 7 19 1 2014 7 21 1 2014 7 22 1 2014 7 23 1 2014 7 29 1 2014 7 30 1 2014 7 31 这是用户ID:1的7月份的登陆日志情况,简单说明一下,3号有两条重复的数据,表明3号用户登陆了2次,14号用户登陆了3次,即一天用户可能登陆N次,产生重复的数据。所以必须先去重。 具体算法说明: 1 首先去重得到数据集 T 2 在去重的数据集上通过分析函数over按user_id对日期login_day进行组内排序获得序号row_number(),并用日期减去当前组内排序号得到一个差值rn 3 按user_id和差值rn进行GROUP BY,取COUNT>=7的记录去重得最终结果 select distinct user_id,min(login_day),max(login_day) from (select t.*, trunc(t.login_day - row_number() over(partition by t.user_id order by t.login_day)) rn from (select distinct * from login_history) t where t.login_year=2014 and t.login_month=7) group by user_id, rn having count(1)>=7
试试其它关键字
同语言下
.
查看某张表的表结构
.
oracle 集合操作
.
for 循环中倒序 用reverse
.
Oracle 临时表空间收缩
.
查看session及其对应运行的sql
.
Oracle常用查看表结构命令
.
Oracle Connect By Prior用法(实现递归查询)
.
重置排序 SEQUENCE
.
创建一个trigger
.
批量替换字段中的字符
可能有用的
.
查看某张表的表结构
.
oracle 集合操作
.
for 循环中倒序 用reverse
.
Oracle 临时表空间收缩
.
查看session及其对应运行的sql
.
Oracle常用查看表结构命令
.
Oracle Connect By Prior用法(实现递归查询)
.
重置排序 SEQUENCE
.
创建一个trigger
.
批量替换字段中的字符
淑臣
贡献的其它代码
(
12
)
.
处理带Emoji表情的的字符串
.
字符串交换(不是简单的反遍历)
.
将PPT转化为PDF
.
自定义上传按钮样式
.
通过分析函数实现求连续天数登陆的用户
.
连接
.
实现无符号数转换、字符串补齐、md5、uuid、随机数示
.
DNS 域名查询
.
图片文件保存到XML中
.
比较年龄
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3