mysql - 有没有办法在 HAVING 中包含双重条件?

标签 mysql sql group-by mysql-error-1064

我目前正在处理如下所示的查询。有两个表 - membersmember_gathering

SELECT id, city_id, name FROM members
WHERE "id" = "member_id" IN
(
   SELECT "member_id" from member_gathering
   GROUP BY "member_id"
   HAVING COUNT(DATEDIFF("visited","joined">=365))>=5
   ORDER BY "member_id"
)

ORDER BY id*1;

目标是输出所有满足加入超过5个群组条件且成员活跃时间超过一年的ID。活跃意味着“已访问”列和“已加入”列(均为TIMESTAMP)之间的差异超过一年(我将其设置为 365 天)。

但是,运行后,此代码显示了members表中的所有行(尽管手动检查两个表显示某些行不同时满足这两个条件)。

关于如何改进上面的代码有什么想法吗?我不确定是否可以在 COUNT() 中使用“嵌套”条件,但之前使用的所有其他变体都显示 NULL 值或返回表中的所有行,这显然是不对的。另外,我认为问题可能出在 DATEDIFF 函数上。

欢迎提出所有建议:我是 MySQL 的新手,所以我对它不太熟悉。

UPD:数据样本: 1)成员

id     city_id    name
2      980        Joey
5      980        Carl
10     1009       Louis
130    1092       Andrea

2)member_gathering

member_id      gathering_id     joined            visited    
2              1             2010-01-01 00:00:00  2010-02-01 00:00:00
2              2             2010-01-01 00:00:00  2010-02-01 00:00:00
5              2             2010-01-01 00:00:00  2010-02-01 00:00:00
10             3             2010-01-01 00:00:00  2010-02-01 00:00:00
130            1             2010-02-01 00:00:00  2013-02-01 00:00:00
130            2             2010-02-01 00:00:00  2013-02-01 00:00:00
130            3             2010-02-01 00:00:00  2014-02-01 00:00:00
130            4             2010-02-01 00:00:00  2018-02-01 00:00:00
130            5             2010-02-01 00:00:00  2015-02-01 00:00:00

预期结果仅为 ID 130,因此:130, 1092, Andreana。

最佳答案

我相信您首先需要查找 datediff 为 365 天或更长的所有记录。然后查找具有 5 个或更多此类实例的成员。这需要 WHERE 和 HAVING 子句:

SELECT id, city_id, name
FROM members
WHERE id IN (
    SELECT member_id
    FROM member_gathering
    WHERE DATEDIFF(visited, joined) >= 365
    GROUP BY member_id
    HAVING COUNT(*) >= 5
)

关于mysql - 有没有办法在 HAVING 中包含双重条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58818162/

相关文章:

python - Dask 数据框中的多个聚合用户定义函数

php - 将数据库行放入关联数组的简单方法

php - 无法使用PDO向mysql插入数据

sql - SQL 中的 COALESCE 函数

sql - 如何根据Teradata SQL中的条件计算带重置的移动总和?

sql - PostgresSQL 'WHERE' 应该去哪里聚合?

php - 基于关键词的 PHP 中的 MySQL 搜索

mysql - 无法从docker容器连接到数据库

c# - 在 Entity Framework Core 上禁用 AutoDetectChanges

sql - 消除重复数据