gpt4 book ai didi

MySQL 查找具有相同 customerid 但具有两个不同值的记录

转载 作者:可可西里 更新时间:2023-11-01 08:49:26 26 4
gpt4 key购买 nike

我有一个名为 orders 的表,我在其中跟踪成员(member)的所有交易。此表跟踪对其 registrationstatusid 的所有更改。我需要找到将 registrationstatusid 从 7 更改为 5 的成员。但我不知道如何编写查询。这是我尝试过的:

select memberevents.memberid, orders.registrationstatusid
FROM orders
INNER JOIN memberevents ON orders.membereventid = memberevents.id
WHERE
memberevents.eventid = 2 AND
memberevents.deletedAt IS NULL AND
orders.registrationstatusid IN (5,7)
ORDER BY m.memberid, o.updatedAt

该查询会显示所有包含 5 和 7 的记录,但我只需要包含 5 和 7 的成员。如果我尝试执行 AND (orders.registrationstatusid = 5 AND orders.registrationstatusid = 7),它找不到任何记录。谁能帮帮我?

最佳答案

这是一个“set-within-sets”查询的例子。您可以通过聚合并将逻辑放在 having 子句中来解决这个问题:

select memberevents.memberid
FROM orders INNER JOIN
memberevents
ON orders.membereventid = memberevents.id
WHERE memberevents.eventid = 2 AND
memberevents.deletedAt IS NULL
group by memberevents.memberid
having sum(orders.registrationstatusid = 5) > 0 and
sum(orders.registrationstatusid = 7) > 0;

唯一的注意事项:这显示了同时具有“5”和“7”值的成员。但是,它没有指定值的顺序。

编辑:

您可以使用这个字符串操作技巧找到顺序:

select memberevents.memberid,
group_concat(orders.registrationstatusid) as statuses
FROM orders INNER JOIN
memberevents
ON orders.membereventid = memberevents.id
WHERE memberevents.eventid = 2 AND
memberevents.deletedAt IS NULL
group by memberevents.memberid
having concat(',', statuses, ',') like '%,7,5,%';

我意识到下面的 having 子句也有效:

having find_in_set(5, statuses) = find_in_set(7, statuses) + 1 and
find_in_set(7, statuses) > 0;

关于MySQL 查找具有相同 customerid 但具有两个不同值的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18194413/

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