首先我们需要明白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)数据一致性和可维护性,以确保数据的安全性和可靠性。主要包括:①安全性控制:以防止数据丢失、错误更新和越权使用;②完整性控制:保证数据的正确性、有效性和相容性;③并发控制:使在同一时间周期内,允许对数据实现多路存取,又能防止用户之间的不正常交互作用;④故障的发现和恢复:由数据库管理系统提供一套方法,可及时发现故障和修复故障,从而防止数据被破坏。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)