2013-04-10 47 views
2

選擇MAX日期我有這個MySQL查詢: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)

這怎麼辦?

+0

只是使用這個功能'MAX(student_enddate);' – 2013-04-10 09:48:08

+0

呀試過它無處不在,但仍然沒有選擇某種原因最高的日期。 – David 2013-04-10 09:49:22

+0

WHERE sd.student_enddate =( SELECT MAX(sd.student_enddate) FROM表名,如果你想放的任何地方條件 ) – 2013-04-10 09:51:39

回答

5

修改你的子查詢如下:

(
    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 
    ) 
) 
+0

剛剛輝煌。這解決了我的問題,是我的問題的完美答案! – David 2013-04-10 09:59:56