mysql,统计出两个月连续活跃的用户

mysql,统计出两个月连续活跃的用户,第1张

首先我们需要明白SQL语言的局限,它属于面向集合的描述性语言,该语言无法在记录间进行浏览定位,因此涉及需要进行不同记录间进行比较的问题时,它会很无力。题主这类问题最好交由应用程序端用编程的方法解决,而在数据库端单纯用SQL语言解决则会相当麻烦和低效,很多时候甚至是无解的。

下面就题主的问题尝试用纯SQL查询来实现,请参考系列实验:

-- 创建测试表并插入测试数据

DROP TABLE IF EXISTS TEST

CREATE TABLE TEST (USERID VARCHAR(10),MONTHID INT)

INSERT INTO TEST VALUES

('10001',1),('10002',3),('10003',2),('10002',4),

('10002',3),('10001',2),('10001',3),('10002',12)

-- 查看测试数据

SELECT * FROM  TEST

-- 筛选出曾经连续活跃2个月和3个月的用户ID

SELECT T.USERID,

CASE WHEN MAX(T.DIFF1)=1 THEN '是' ELSE '否' END AS 连续活跃两月,

CASE WHEN MAX(T.DIFF2)=2 THEN '是' ELSE '否' END AS 连续活跃三月

FROM (SELECT A.*,

(A.MONTHID-(SELECT MAX(MONTHID) FROM TEST WHERE

USERID=A.USERID AND MONTHID<A.MONTHID))

AS DIFF1,

(A.MONTHID-(SELECT MAX(MONTHID) FROM TEST WHERE

USERID=A.USERID AND

MONTHID<(SELECT MAX(MONTHID) FROM TEST WHERE

USERID=A.USERID AND MONTHID<A.MONTHID))) AS DIFF2 FROM TEST A) T

WHERE T.DIFF1=1 OR T.DIFF2=2 GROUP BY T.USERID

DROP TABLE IF EXISTS TEST -- 删除测试表

实验截图

输出效果

查看Oracle数据库的用户登录的记录档案是从log文件中挖出用户登录信息。

1、创建数据字典文件(data-dictionary)

(1)首先在init.ora初始化参数文件中,指定数据字典文件的位置,也就是添加一个参数UTL_FILE_DIR,该参数值为服务器中放置数据字典文件的目录。

如:UTL_FILE_DIR = ($ORACLE_HOME\logs) ,重新启动数据库,使新加的参数生效。

(2)创建数据字典文件:

SQL>connect /as sysdba

SQL>execute dbms_logmnr_d.build(dictionary_filename =>

'dict.ora',dictionary_location =>'G:\oracle\logs')

PL/SQL procedure successfully completed

2、创建要分析的日志文件列表:

(1)创建分析列表,即所要分析的日志:

SQL>execute dbms_logmnr.add_logfile(LogFileName =>

'G:\ORACLE\ORADATA\ORADBSP\REDO04.LOG',Options =>dbms_logmnr.new)

PL/SQL procedure successfully completeds

(2)添加分析日志文件(一次添加1个为宜):

SQL>

execute dbms_logmnr.add_logfile(LogFileName =>

'G:\ORACLE\ORADATA\ORADBSP\REDO05.LOG',

Options =>dbms_logmnr.ADDFILE)

PL/SQL procedure successfully completed

3、使用logMiner进行日志分析:

(1)无限制条件,即用数据字典文件对要分析的日志文件所有内容做分析:

SQL>execute dbms_logmnr.start_logmnr

(DictFileName =>'G:\oracle\logs\dict.ora')

PL/SQL procedure successfully completed

数据记录是指对应于数据源中一行信息的一组完整的相关信息。例如,客户邮件列表中的有关某位客户的所有信息为一条数据记录。

数据库具有以下主要特点:

(1)实现数据共享。数据共享包含所有用户可同时存取数据库中的数据,也包括用户可以用各种方式通过接口使用数据库,并提供数据共享。

(2)减少数据的冗余度。同文件系统相比,由于数据库实现了数据共享,从而避免了用户各自建立应用文件。减少了大量重复数据,减少了数据冗余,维护了数据的一致性。

(3)数据的独立性。数据的独立性包括数据库中数据库的逻辑结构和应用程序相互独立,也包括数据物理结构的变化不影响数据的逻辑结构。

(4)数据实现集中控制。文件管理方式中,数据处于一种分散的状态,不同的用户或同一用户在不同处理中其文件之间毫无关系。利用数据库可对数据进行集中控制和管理,并通过数据模型表示各种数据的组织以及数据间的联系。

(5)数据一致性和可维护性,以确保数据的安全性和可靠性。主要包括:①安全性控制:以防止数据丢失、错误更新和越权使用;②完整性控制:保证数据的正确性、有效性和相容性;③并发控制:使在同一时间周期内,允许对数据实现多路存取,又能防止用户之间的不正常交互作用;④故障的发现和恢复:由数据库管理系统提供一套方法,可及时发现故障和修复故障,从而防止数据被破坏。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10867141.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存