我目前正在处理类似这样的查询。有两个表-members
和member_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天)。
但是,运行后,此代码显示了成员表中的所有行(尽管手动检查两个表都显示某些行不能同时满足两个条件)。
关于如何改进上面代码的任何想法?我不确定是否可以在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。