【问题标题】:mysql search min(date) within a rangemysql 在一个范围内搜索 min(date)
【发布时间】:2016-09-09 09:01:53
【问题描述】:

我想找到一个设定范围内的最短日期,下面的例子我想找到每个学生的最短申请日期。 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 中您定义了哪些 ROWS 被使用。所以不可能使用 WHERE "MIN(applications.date)" 的结果作为 WHERE 中的条件。使用 AND applications .date BETWEEN '2016-05-01' AND '2016-05-31'

标签: mysql min


【解决方案1】:

试试这个,只是在where 子句中使用表列而不是别名;)

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

【讨论】:

  • 这不起作用,因为它将搜索该范围内的所有日期,而不仅仅是最小一个。这正是我遇到的问题:(
  • 对不起,我弄错了你的问题,我已经更新了我的答案。请再检查一遍。
  • 感谢这项工作。 :) 但一个缺点是计算速度要慢得多,所以我可以考虑使用 PHP 来过滤循环中的日期。
【解决方案2】:

您不能使用 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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-12
    • 2014-11-01
    • 2018-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多