簡體   English   中英

MySQL查找具有相同customerid且具有兩個不同值的記錄

[英]MySQL find records with same customerid that have two different values

我有一個名為orders的表,我跟蹤成員的所有交易。 此表記錄了其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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM