gpt4 book ai didi

SQL 查询,根据连接表中的最后一个值进行过滤

转载 作者:行者123 更新时间:2023-11-29 13:34:18 25 4
gpt4 key购买 nike

我有一个嵌套查询的问题(这个问题我不知道该怎么做)我正在使用 PostgreSQL

我有 2 个表:

users
id name
1 x
2 y
3 z

call
id user_id time data
1 1 00:10 stat1
2 1 00:15 stat2
3 3 00:10 stat2
4 3 00:30 stat1
5 3 00:45 stat2
6 3 00:50 stat3

我需要得到的是一组用户,但前提是他们的最后一次通话是 stat2。我遇到的问题是我不知道如何只检查最新数据。

我的查询:

SELECT users.*, call.* FROM users, call WHERE users.id=call.user_id AND call.id IN (SELECT id FROM call WHERE call.data='stat2') ORDER BY users.id

我得到的是:

users
id name id user_id time data
1 x 2 1 00:15 stat2
3 z 3 3 00:10 stat2
3 z 5 3 00:45 stat2

我需要得到的是:

users
id name id user_id time data
1 x 1 1 00:15 stat2

3 不应该显示,因为它的最后一个值是统计数据 3(显然不应该加倍,因为我有 2 个统计数据。

我可以用多个查询来完成,但我想一次完成。

谢谢

最佳答案

因此,您想要获取每个 Users.idlast 调用 ID。你用一个分组来做到这一点。然后,一旦获得最后一个调用 ID,就检查最后一个调用 ID 的状态是否为 stat2

查询看起来像:

SELECT *
FROM USERS U
INNER JOIN
(SELECT user_id, MAX(id) AS last_id
FROM Calls c
GROUP BY user_id
) t0
ON t0.user_id = u.id
INNER JOIN Calls c ON c.id = t0.last_id
WHERE c.type = 'stat2'

fiddle 示例:http://www.sqlfiddle.com/#!1/7016e/5

关于SQL 查询,根据连接表中的最后一个值进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16923961/

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