mysql搜索最小值(日期)在一个范围内

mysql搜索最小值(日期)在一个范围内,mysql,min,Mysql,Min,我想找到一个设定范围内的最小日期,下面的例子我想找到每个学生的最小申请日期。MySQL不接受此查询 SELECT MIN(applications.date) AS 'D', students.name FROM applications, students WHERE applications.student_id = students.id AND D BETWEEN '2016-05-01' AND '2016-05-31' GROUP BY students.id 尝试此方法,只需使用

我想找到一个设定范围内的最小日期,下面的例子我想找到每个学生的最小申请日期。MySQL不接受此查询

SELECT MIN(applications.date) AS 'D', students.name
FROM applications, students
WHERE applications.student_id = students.id AND
D BETWEEN '2016-05-01' AND '2016-05-31'
GROUP BY students.id

尝试此方法,只需使用
where
子句中的表列,而不是别名;)


您不能使用
where
子句对聚合函数的结果应用过滤器,该聚合函数是
min()
,而可以使用
having
子句

SELECT MIN(a.date) AS `D`,s.id,s.name
FROM applications a
JOIN students s ON a.student_id = s.id 
GROUP BY s.id,s.name
HAVING `D` >= '2016-05-01' AND `D` <= '2016-05-31'
选择MIN(a.date)作为'D',s.id,s.name
来自应用程序a
在a.student\u id=s.id上加入学生s
按s.id、s.name分组

在您定义使用哪几行的位置有'D`>='2016-05-01'和'D'。因此,不可能使用WHERE“MIN(applications.date)”的结果作为WHERE中的条件。使用和应用。日期介于“2016-05-01”和“2016-05-31”之间。这将不起作用,因为它将搜索该范围内的所有日期,而不仅仅是最小日期。这正是我所面临的问题:(对不起,我误解了你的问题,我已经更新了我的答案。请再次检查。谢谢。)。但是一个缺点是计算速度要慢得多,所以我可以考虑使用PHP来过滤循环中的日期。
SELECT MIN(a.date) AS `D`,s.id,s.name
FROM applications a
JOIN students s ON a.student_id = s.id 
GROUP BY s.id,s.name
HAVING `D` >= '2016-05-01' AND `D` <= '2016-05-31'