gpt4 book ai didi

MySQL 查询根据条件限制查找行重复项

转载 作者:行者123 更新时间:2023-11-29 04:45:19 27 4
gpt4 key购买 nike

我有两个表:

Members:

id username


Trips:

id member_id flag_status created
("YES" or "NO")

我可以这样查询:

SELECT 
Trip.id, Trip.member_id, Trip.flag_status
FROM
trips Trip
WHERE
Trip.member_id = 1711
ORDER BY
Trip.created DESC
LIMIT
3

哪个可以给出这样的结果:

id       member_id     flag_status
8 1711 YES
9 1711 YES
10 1711 YES

我的目标是知道该成员的最后三个行程是否都有一个 flag_status = "YES",如果三个中的任何一个 != "YES",那么我不想让它计数。

我还希望能够删除 WHERE Trip.member_id = 1711 子句,并让它对我的所有成员运行,并提供最近 3 次旅行都具有 flag_status = "YES"的成员总数

有什么想法吗?

谢谢!

http://sqlfiddle.com/#!2/28b2d

在那个 sqlfiddle 中,当我正在寻找的正确查询运行时,我应该看到如下结果:

 COUNT(Member.id)
2

应该符合条件的两个成员是成员 1 和 3。成员 5 失败了,因为他的一个行程有 flag_status = "NO"

最佳答案

您可以使用 GROUP_CONCAT 函数,获取按 id 升序排列的所有状态的列表:

SELECT
member_id,
GROUP_CONCAT(flag_status ORDER BY id DESC) as status
FROM
trips
GROUP BY
member_id
HAVING
SUBSTRING_INDEX(status, ',', 3) NOT LIKE '%NO%'

然后使用 SUBSTRING_INDEX 您可以只提取最后三个状态标志,并排除那些包含 NO 的标志。请看 fiddle here .我假设您的所有行都按 ID 排序,但如果您有创建日期,则最好使用:

GROUP_CONCAT(flag_status ORDER BY created DESC) as status

正如雷蒙德建议的那样。然后,您还可以使用类似以下内容仅返回返回的行数:

SELECT COUNT(*)
FROM (
...the query above...
) as q

关于MySQL 查询根据条件限制查找行重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19877776/

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