2014-01-20 37 views
0

編輯版本如何在mysql中選擇最近的日期

EMPLOYEE表

|ID | employee_id | Name    | 
| 1 | 123   | John Richard  | 
| 2 | 554   | Daniel Domingo  | 

教育背景

|ID | employee_id | School/institute | date graduated | 
| 1 | 123   | highschool   | 2007   | 
| 2 | 123   | college   | 2011   | 
| 3 | 554   | college   | 2010   | 
| 4 | 554   | masteral   | 2013   | 

職務

|ID | employee_id | Job description | 
| 1 | 123   | Free lancer  | 
| 2 | 554   | admin assistant | 

,我需要選擇員工的教育背景的最新日期信息

結果將是

結果查詢

|ID | employee_id | Name    | Job title  | year_graduated | school_institute | 
| 1 | 123   | John Richard  | Free Lancer  | 2011  | college   | 
| 2 | 554   | Daniel Domingo  | Admin Assistant | 2013  | masteral   | 

回答

1

嘗試這種情況:

SELECT * 
FROM (SELECT * FROM tableA ORDER BY employee_id, date_graduated DESC) A 
GROUP BY employee_id 

OR

SELECT a.* 
FROM tableA a 
INNER JOIN (SELECT employee_id, MAX(date_graduated) maxDate 
      FROM tableA GROUP BY employee_id 
     ) b ON a.employee_id = b.employee_id AND a.date_graduated = b.maxDate 
-1
SELECT * 
FROM t 
GROUP BY employee_id 
HAVING date_graduated=max(date graduated) 

,你會得到想要的結果

+0

一些日期沒有被選擇,並且在數據庫中的第一輸入由 – Vincent

+0

@Vincent我選擇並組已經測試了我的查詢,結果如下所示 –

+0

@Vincent您是否有1和3 ID的結果? –

1
SELECT employee_id ,MAX([date graduated]) FROM Table GROUP BY [employee_id] 

結果是

employee_id | date graduated 
---------------------------- 
     123 | 2011 
     554 | 2013 
+0

我試過你的查詢,它產生了那個員工123和高中級別。 – Vincent

1

子查詢將返回爲每一位員工的最大日期,則應加入這個子查詢與表返回整行:

SELECT yourtable.* 
FROM 
    yourtable INNER JOIN (SELECT employee_id, MAX(`date graduated`) max_date 
         FROM yourtable 
         GROUP BY employee_id) m 
    ON yourtable.employee_id = m.employee_id 
    AND yourtable.`date graduated` = m.max_date 
0

員工123

SELECT * FROM `your_table` 
WHERE employee_id=123 
ORDER BY date_graduated DESC LIMIT 1 

僱員554

SELECT * FROM `your_table` 
WHERE employee_id=554 
ORDER BY date_graduated DESC LIMIT 1