Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MySQL,我如何判断谁每年至少参加一次活动?_Mysql_Sql_Relational Division - Fatal编程技术网

使用MySQL,我如何判断谁每年至少参加一次活动?

使用MySQL,我如何判断谁每年至少参加一次活动?,mysql,sql,relational-division,Mysql,Sql,Relational Division,我有一个带有name列和date列的表。我从2006年起就有过一些活动。如何获得2006年至2017年期间每年至少参加一次活动的名单 此外,如何使用数据库中显示的最近一年,而不是硬编码2017?您可以这样做: select name from t group by name having count(distinct year(date)) = (select count(distinct year(date)) from

我有一个带有name列和date列的表。我从2006年起就有过一些活动。如何获得2006年至2017年期间每年至少参加一次活动的名单

此外,如何使用数据库中显示的最近一年,而不是硬编码2017?

您可以这样做:

select name
from t
group by name
having count(distinct year(date)) = (select count(distinct year(date))
                                     from t
                                    );
这将选择在您有事件记录的所有年份中都参加过事件的用户

如果您特别想要所有年份,即使是没有事件的当前年份,那么:

select name
from t
group by name
having count(distinct year(date)) = (select 1 + year(curdate()) - year(min(date)) + 1
                                     from t
                                    );

样本数据和预期结果将是有帮助的。工作完美。谢谢