【发布时间】:2011-04-03 01:32:02
【问题描述】:
我是 postgres 的新手,所以请放轻松。
我正在尝试编写一个查询,以便对于任何用户,我可以提取所有日志文件(包括他们的活动和其他人的活动)一分钟前和一分钟后他们的名字出现在日志中相同的批戳。
chat.batchstamp is varchar
chat.datetime is timestamp
chat.msg is text
chat.action is text (this is the field with the username)
这是我想使用的单独命令,我只是不知道如何将它们放在一起,以及这是否真的是正确的方法。
SELECT batchstamp, datetime, msg FROM chat WHERE action LIKE 'username';
预期输出:
batchstamp datetime msg
abc 2010-12-13 23:18:00 System logon
abc 2010-12-13 10:12:13 System logon
def 2010-12-14 11:12:18 System logon
SELECT * FROM chat WHERE datetime BETWEEN datetimefrompreviousquery - interval '1 minute' AND datetimefrompreviousquery + interval '1 minute';
您能帮我解释一下我应该怎么做才能将前一个查询中的数据输入到第二个查询中吗?我看过子查询,但我需要运行两个子查询吗?我应该建立一个临时表吗?
全部完成后,如何确保查询匹配的时间在同一个batchstamp内?
如果您能够为我指明正确的方向,那就太好了。如果您能够提供查询,那就更好了。如果我的解释没有意义,可能是我看这个太久了。
感谢您的宝贵时间。
基于下面 nate c 的代码,我使用了这个:
SELECT * FROM chat,
( SELECT batchstamp, datetime FROM chat WHERE action = 'fakeuser' )
AS log WHERE chat.datetime BETWEEN log.datetime - interval '1 minute' AND log.datetime + '1 minute';
它似乎不会返回“fakeuser”的每一次点击,当它返回时,它会从每个“batchstamp”中提取日志,而不仅仅是找到“fakeuser”的那个。我要进行另一个嵌套查询吗?这种类型的程序叫什么,我可以进一步研究它?
再次感谢。
【问题讨论】:
-
用户名在哪个字段?
-
同一个batchstamp中的所有日志文件。哪个是日志文件列?乍一看,我认为 nate c 的答案是正确的,但作为他,我也对 batchstamp 与日志文件感到困惑
-
“batchstamp”列标识它来自哪个日志文件。我所有的日志文件都被转储到一张表中。我可以通过查看“batchstamp”来判断条目来自哪个文件。我想在同一个batchstamp中找到特定用户活动之前和之后的所有活动。对不起,令人费解的解释。感谢您提供帮助。
标签: postgresql nested subquery