我正在查询存储在数据库中的一些系统日志,但不幸的是,供应商在表关系方面做了很差的工作来创建数据库结构。我通常用于这类事情的报告工具依赖于标准SQLite查询(无脚本/编码),我宁愿使用该标准报告工具在系统中使用用户操作的此报告,以便它可以安排和监控到确保它运行。sqlite查询 - 将记录添加到空记录之间的记录?
这些日志列出了用户在系统中执行的操作,我需要将两个表结合在一起以获取他们所做的最新报告。
表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中的主要使用时间戳作为它的一部分。时间戳与服务器&操作为空的用户的表2中的第一个时间戳匹配。如果查询表2并按日期排序,那么时间,用户所做的每个日志部分都以时间戳和空白服务器&操作条目开头。我能想到的加入这些的唯一方式是通过某种方式使用UID,Date,Time列创建表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
我不确定这是否可能,但如果是这样,我希望有人知道。
想法?
这几乎奏效!我其实只是意识到表1并不总是有表2中匹配的记录。表1包含有关用户采取的行动的附加信息,但不是他们所做的所有事情都会在此详细信息中生成日志(想想我为什么要分割这个现在跨表),并且如果t1中没有匹配,那么导致生成的“Key”在t2中不准确。 – user3246693
@ user3246693。 。 。你可以添加一个'where'条件,像't1。“key”就像t2.uid || '|' || strftime(日期,'%Y%m%d')|| '%''。 –