【发布时间】:2014-01-29 23:19:44
【问题描述】:
我正在查询存储在数据库中的一些系统日志,不幸的是,供应商在创建数据库结构方面的表关系方面做得很差。我通常用于此类事情的报告工具依赖于标准 SQLite 查询(无脚本/编码),我更愿意使用该标准报告工具将这个关于系统中用户操作的报告踢出,以便可以安排和监控它确保它运行。
这些日志列出了用户在系统中执行的操作,我需要将 2 个表绑定在一起以获取他们所做的完整报告。
表 1:供应商很友好地在其中包含了一个键。
Key Other_Columns
-------------------------------------
jdoe|20140122|093537 stuff
jdoe3|20140122|093657 stuff
jdoe2|20140122|151644 stuff
表 2:此表中没有键,但它与另一表相关联。
UID Date Time Server Action
------------------------------------------------
jdoe 1/22/2014 9:35:37
jdoe 1/22/2014 9:35:37 server1 action1
jdoe 1/22/2014 9:35:41 server1 action2
jdoe3 1/22/2014 9:36:57
jdoe3 1/22/2014 9:36:58 server3 action1
jdoe3 1/22/2014 9:37:01 server4 action2
jdoe2 1/22/2014 15:16:44
jdoe2 1/22/2014 15:16:44 server2 action1
jdoe2 1/22/2014 15:16:46 server2 action2
jdoe2 1/22/2014 15:16:49 server2 action3
现在为了让这更有趣,您会注意到表 1 中的 Key 使用时间戳作为其中的一部分。对于 Server 和 Action 为空的用户,时间戳与表 2 中的第一个时间戳相匹配。如果您查询表 2 并按日期排序,然后按时间排序,则用户所做操作的每个日志部分都以时间戳和空白服务器和操作条目开头。我能想到的加入这些的唯一方法是通过使用 UID、日期、时间列以某种方式为表 2 创建一个键,但我需要对空操作/服务器行之间的每一行应用相同的键。这让我很难过。
我想我需要自己查询表 2 以创建下面的临时表,然后将其连接回表 1,但我不知道如何编写一个查询来从表 2 生成下面的输出:
UID Date Time Server Action Key
----------------------------------------------------------------------------
jdoe 1/22/2014 9:35:37 jdoe|20140122|093537
jdoe 1/22/2014 9:35:37 server1 action1 jdoe|20140122|093537
jdoe 1/22/2014 9:35:41 server1 action2 jdoe|20140122|093537
jdoe3 1/22/2014 9:36:57 jdoe3|20140122|093657
jdoe3 1/22/2014 9:36:58 server3 action1 jdoe3|20140122|093657
jdoe3 1/22/2014 9:37:01 server4 action2 jdoe3|20140122|093657
jdoe2 1/22/2014 15:16:44 jdoe2|20140122|151644
jdoe2 1/22/2014 15:16:44 server2 action1 jdoe2|20140122|151644
jdoe2 1/22/2014 15:16:46 server2 action2 jdoe2|20140122|151644
jdoe2 1/22/2014 15:16:49 server2 action3 jdoe2|20140122|151644
我不确定这是否可行,但如果可以,我希望有人知道。
想法?
【问题讨论】: