gpt4 book ai didi

postgresql - 在 Postgres 中避免多个子查询的语法

转载 作者:行者123 更新时间:2023-11-29 12:14:44 25 4
gpt4 key购买 nike

我是 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”的日志。我要进行另一个嵌套查询吗?这种程序叫什么,我可以进一步研究它?

再次感谢。

最佳答案

您的第一个查询可以进入带有“(”括号和“作为别名”名称的 from 子句。之后您可以像在查询的其余部分中引用普通表一样引用它。

SELECT
*
FROM chat,
(
SELECT
batchstamp,
datetime,
msg
FROM log
WHERE action LIKE 'username'
) AS log

WHERE chat.datetime BETWEEN
log.datetime - interval '1 minute'
AND log.datetime + interval '1 minute';

这应该让你开始。

关于postgresql - 在 Postgres 中避免多个子查询的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5526987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com