oracle查询连续n天登录的用户

-- 查询连续3天登录的用户

1 先创建一个表,如下:

1 create table USER_DATA
2 (
3 USER_ID NUMBER,
4 LOGIN_TIME DATE
5 );

2 插入用户登录数据:

 1 insert into user_data (USER_ID, LOGIN_TIME) values (‘10002‘, to_date(‘21-07-2014‘, ‘dd-mm-yyyy‘));
 2 insert into user_data (USER_ID, LOGIN_TIME) values (‘10002‘, to_date(‘22-07-2014‘, ‘dd-mm-yyyy‘));
 3 insert into user_data (USER_ID, LOGIN_TIME) values (‘10002‘, to_date(‘24-07-2014‘, ‘dd-mm-yyyy‘));
 4 insert into user_data (USER_ID, LOGIN_TIME) values (‘10002‘, to_date(‘25-07-2014‘, ‘dd-mm-yyyy‘));
 5 insert into user_data (USER_ID, LOGIN_TIME) values (‘10003‘, to_date(‘21-07-2014‘, ‘dd-mm-yyyy‘));
 6 insert into user_data (USER_ID, LOGIN_TIME) values (‘10001‘, to_date(‘28-07-2014‘, ‘dd-mm-yyyy‘));
 7 insert into user_data (USER_ID, LOGIN_TIME) values (‘10001‘, to_date(‘29-07-2014‘, ‘dd-mm-yyyy‘));
 8 insert into user_data (USER_ID, LOGIN_TIME) values (‘10001‘, to_date(‘30-07-2014‘, ‘dd-mm-yyyy‘));
 9 insert into user_data (USER_ID, LOGIN_TIME) values (‘10001‘, to_date(‘21-07-2014‘, ‘dd-mm-yyyy‘));
10 insert into user_data (USER_ID, LOGIN_TIME) values (‘10001‘, to_date(‘22-07-2014‘, ‘dd-mm-yyyy‘));
11 insert into user_data (USER_ID, LOGIN_TIME) values (‘10001‘, to_date(‘23-07-2014‘, ‘dd-mm-yyyy‘));
12 insert into user_data (USER_ID, LOGIN_TIME) values (‘10001‘, to_date(‘24-07-2014‘, ‘dd-mm-yyyy‘));
13 insert into user_data (USER_ID, LOGIN_TIME) values (‘10001‘, to_date(‘26-07-2014‘, ‘dd-mm-yyyy‘));

3 查询连续3天登录的用户

思路:现有的数据里面已经是经过处理的,每个用户每天只有一条数据,并且登录时间是每天的零点,如果是真实的数据则进行trunc后就行,然后选择的时候,需要依据user_id和login_time进行排序,这样在外层选择时,rownm在每个用户按日志排序时是连续的,然后查询时用日志减去rownum,这样如果是连续的日期,其相减的结果就是一样的,然后根据此结果来判断是否是连续登录就行了,查询连续3天登录的用户id的具体代码如下:

 1 select distinct user_id
 2 from
 3 (
 4     select b.user_id, b.d_temp, count(*)
 5     from
 6     (
 7         select a.user_id, a.login_time - rownum d_temp
 8         from
 9         (
10             select t.*
11             from user_data t
12             order by t.user_id, t.login_time
13         )a
14     )b
15     group by b.user_id, b.d_temp
16     having count(*) >= 3
17 );

以上查询出来的结果就是至少连续登录3天的用户id了.

oracle查询连续n天登录的用户

时间: 2024-10-10 23:29:49

oracle查询连续n天登录的用户的相关文章

oracle查询在当前数据库下当前用户拥有的表语句

1.查询表的数目: select count(*) from tabs select count(*) from user_tables 2.查询用户拥有哪些表: select * from tabs select * from user_tables 3.管理员用户 SELECT * FROM ALL_TABLES WHERE OWNER='用户名';

oracle查询连续的日期

select to_date('2015-10-01', 'yyyy-mm-dd') + rownum - 1     from dual   connect by rownum <= to_date('2015-10-20', 'yyyy-mm-dd') -              to_date('2015-10-01', 'yyyy-mm-dd') + 1;

oracle查询所有用户表的表名、主键名称、索引、外键等

1.查找表的所有索引(包括索引名,类型,构成列): select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name = 要查询的表 2.查找表的主键(包括名称,构成列): select cu.* from user_cons_columns cu, user_constr

【转】oracle查询用户表,函数,储存过程,

◆Oracle查询用户表空间:select * from user_all_tables ◆Oracle查询所有函数和储存过程:select * from user_source ◆Oracle查询所有用户:select * from all_users.select * from dba_users ◆Oracle查看当前用户连接:select * from v$Session ◆Oracle查看当前用户权限:select * from session_privs ◆Oracle查看用户表空间

Oracle查询用户所有表、字段等信息

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 下面为您介绍的语句用于实现Oracle查询用户所有表,如果您对oracle查询方面感兴趣的话,不妨一看. select * from all_tab_comments -- 查询所有用户的表,视图等 select * from user_tab_comments -- 查询本用户的表,视图等 select * from

【转】Oracle查询用户所有表

查询所有用户的表,视图等 select * from all_tab_comments; 2.  查询本用户的表,视图等 select * from user_tab_comments; 3.  查询所有用户的表的列名和注释 select * from all_col_comments; 4.  查询本用户的表的列名和注释 select * from user_col_comments; 5.  查询所有用户的表的列名等信息(详细但是没有备注) select * from all_tab_col

Oracle查询当前用户的信息

一.查看当前用户信息:1.查看当前用户拥有的角色权限信息:select * from role_sys_privs;2.查看当前用户的详细信息:select * from user_users;3.查看当前用户的角色信息:select * from user_role_privs; 总结:ORACLE中数据字典视图分为3大类,用前缀区别,分别为:USER,ALL 和 DBA,许多数据字典视图包含相似的信息. USER_*:有关用户所拥有的对象信息,即用户自己创建的对象信息.ALL_*:有关用户可

Oracle 数据库登录、用户解锁、改密码、创建用户授权操作

一.数据库登录1.常用账户: 管理员: sys主要练习操作用户: scott2.测试环境是否配置成功: 1.命令窗口 win+R -> cmd(以管理员身份运行) - > sqlplus ->输入用户名与密码 用户名:sys 口令: 自己设置的密码 as sysdba(as sysdba 是给它管理员权限),(输入密码时看不见的) 2.或找到 下面的文件夹,打开SQL Plus 二.一些基本操作切换用户登陆命令: 重新登录scott用户,并指定登录的数据库名称 conn scott/ 密

oracle查询当前用户下所有的表,包括所有的字段

oracle查询当前用户下所有的表,包括所有的字段 背景: ? 前两天接到一个需求,做一个展示所有表名,表备注,表数据,表字段数,点击查看按钮查看字段名和注释,支持导出. 在Oracle中,可用使用视图USER_TABLES查看当前用户有哪些表,都有多少数据: table_name:表名,field_num:表字段数,comments:表注释,count_rows(table_name):统计表数据 SELECT * FROM USER_TABLES; USER_TAB_COLUMNS:表中的所