gpt4 book ai didi

mysql - 跨多行的 WHERE 条件

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

我有这张 table ...

--------------------------------------
| user_id | status | status_date |
--------------------------------------
| 1 | Current | 2012-08-01 |
| 1 | Referral | 2012-03-14 |
| 2 | Referral | 2012-04-23 |
| | | |
--------------------------------------

我如何查询才能找到推荐日期在 2012-06-30 之前且当前日期在 2012-06-30 之后或根本没有当前状态记录的不同 user_id?

数据库是MySQL。

最佳答案

您可以使用 LEFT JOIN 执行此操作:

SELECT  DISTINCT T.User_ID
FROM T
LEFT JOIN T T2
ON t.User_ID = T2.User_ID
AND t2.Status = 'Current'
WHERE T.Status_Date < '20120630'
AND T.Status = 'Referral'
AND (t2.Status_Date > '20120630' OR t2.Status_date IS NULL)

或者,将 GROUP BYHAVINGCOUNT(CASE ...) 一起使用

SELECT  t.User_ID
FROM T
GROUP BY t.user_ID
HAVING COUNT(CASE WHEN t.Status = 'Referral' AND t.Status_Date < '20120630' THEN 1 END) > 0
AND ( COUNT(CASE WHEN t.Status = 'Current' AND t.Status_Date > '20120630' THEN 1 END) > 0
OR COUNT(CASE WHEN t.Status = 'Current' THEN 1 ELSE 0 END) = 0
)

这取决于你的索引和数据量,哪个表现更好,我想在大多数情况下它会是前者

关于mysql - 跨多行的 WHERE 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13143848/

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