MySQL 从连接表中选择 MAX 日期

Posted

技术标签:

【中文标题】MySQL 从连接表中选择 MAX 日期【英文标题】:MySQL select MAX date from joined table 【发布时间】:2013-04-02 02:08:20 【问题描述】:

我有这个mysql 查询:

SELECT 
    s.student_id,
    s.student_firstname,
    s.student_lastname,
    sd.student_startdate,
    sd.student_enddate,
    s.isActive,
    c.city_name,
    ctc.category_name
FROM
    students s
        INNER JOIN
    (SELECT sd1.student_id, sd1.student_startdate, sd1.student_enddate FROM studentdates sd1) sd ON sd.student_id = s.student_id
        INNER JOIN
    cityselections c ON c.city_id = s.student_city_id
        INNER JOIN
    coursecategory ctc ON s.student_course_category_id = ctc.category_id
WHERE
    sd.student_enddate BETWEEN CURDATE() AND ADDDATE(CURDATE(), INTERVAL 14 DAY)
        AND s.student_city_id NOT LIKE '1'
        AND s.student_city_id = 18
        AND s.isActive = 1
GROUP BY s.student_id
ORDER BY sd.student_enddate ASC , s.student_lastname , s.student_firstname

studentdates 表中,每个student_id 上可以有多个student_startdatestudent_enddate,但我想选择每个学生MAX(student_enddate)

如何做到这一点?

【问题讨论】:

就用这个功能MAX(student_enddate); 是的,到处都试过了,但由于某种原因仍然没有选择最高日期。 WHERE sd.student_enddate= (SELECT MAX(sd.student_enddate) FROM tablename 以及如果你想放置任何 where 条件) 如果 student_enddate 存储像 2013-08-28 这样的值,MAX(student_enddate) 可能不起作用。我认为日期被转换为一个整数,在计算最大值时只会使用 2013 年。也许使用 MIN()、MAX() 和 DATEDIFF() 会有所帮助。 【参考方案1】:

如下修改您的子查询:

(
    SELECT
        sd1.student_id, sd1.student_startdate, sd1.student_enddate
    FROM (
        SELECT student_id, MAX(student_enddate) AS enddate
        FROM studentdates
        GROUP BY student_id
    ) AS s_max_enddate
    JOIN studentdates AS sd1 ON (
        sd1.student_id = s_max_enddate.student_id
        AND sd1.student_enddate = s_max_enddate.enddate
    )
)

【讨论】:

太棒了。这解决了我的问题,完美回答了我的问题!

以上是关于MySQL 从连接表中选择 MAX 日期的主要内容,如果未能解决你的问题,请参考以下文章

mysql:左连接但从连接表中选择一个特定项目

MySQL - 从多个表中选择,可能没有连接?

如何正确使用连接/子查询从多个表中选择数据? (PHP-MySQL)

mysql中3个表的内连接

如何从SQL表中选择特定行并在SQL Server中连接多个表?

尝试将日期作为python中的输入并使用mysql连接器更新mysql表中的值