搜索查询加入3个表,1个表有日期

时间:2014-01-21 06:48:41

标签: mysql sql select join

我有3个表,员工表,教育背景和job_title, 我需要加入3个表格并选择员工毕业的最近一年。我需要的结果查询列在下面。

员工表

|ID | employee_id |   Name             |   
| 1 | 123         | Jewel Brin         | 
| 2 | 554         | Donna Ferry        | 
| 3 | 853         | Ricky David        |

教育背景

|ID | employee_id | School/level       | 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    |
| 3 | 853         | Support Admin      |

我需要选择员工教育背景的最新日期信息

结果将是:

结果查询

|ID | employee_id | Name               | Job title       | year_graduated | school_institute |
| 1 | 123         | Jewel Brin         | Free Lancer     |    2011        | college          |
| 2 | 554         | Donna Ferry        | Admin Assistant |    2013        | masteral         |   
| 3 | 853         | Ricky David        | Support Admin   |    Null        |   Null

3 个答案:

答案 0 :(得分:0)

对于Mysql,你可以试试这个

SELECT DISTINCT
 e.employee_id,
 e.Name,
 j.Job_description,
 eb.year_graduated,
 eb.level 
FROM
 EMPLOYEE e 
 LEFT JOIN 
 (SELECT 
 *,
 MAX(t.date_graduated) year_graduated 
 FROM
 (SELECT * FROM Background ORDER BY date_graduated DESC) t 
 GROUP BY employee_id) eb 
 ON (e.employee_id = eb.employee_id) 
 LEFT JOIN JobTitle j 
 ON (e.employee_id = j.employee_id)

See Fiddle Demo

答案 1 :(得分:0)

忘了提,这是MySQL:)

SELECT e.employee_id, Name, `Job description` AS `Job title`, year_graduated, school_institute
FROM `employee` e
INNER JOIN job_title j ON j.employee_id = e.employee_id
LEFT JOIN (SELECT ID, `School/level` AS school_institute, employee_id, `date graduated` AS year_graduated FROM `educational background` b
    INNER JOIN (
        SELECT ID, MAX(`date graduated`) AS max_date FROM `educational background` GROUP BY employee_id
        ) b2
    ON b2.max_date = b.year_graduated AND b2.ID = b.ID
    ) bb ON bb.employee_id = e.employee_id

答案 2 :(得分:0)

在SQL Server中: -

Select *
from 
(
 Select e.ID,e.employee_ID,e.Name,
 b.Level,j.[Job description],
 rn = row_number() 
 over (partition by e.Employee_ID order by [date graduated] desc)
 From Employee e
 left join Background b
 on e.Employee_ID = b.Employee_ID
 left join Jobtitle j
 on j.Employee_ID = b.Employee_ID
 )a
 where a.rn=1

SQL FIDDLE