2016-02-11 2 views
0

Таблица 1: tblemployeeMYSQL: Как получить конкретные данные по table1 и получить последние данные по table2 и Table3

+------------+----------+-----------+-------+-------+ 
| EmployeeID | LastName | FirstName | ID_SC | ID_ES | 
+------------+----------+-----------+-------+-------+ 
| 100000000 | Vallente | Rhea Mae | 7  | 2  | 
+------------+----------+-----------+-------+-------+ 
| 100000001 | Margallo | Matt  | 7  | 2  | 
+------------+----------+-----------+-------+-------+ 

Таблица 2: tblbadge

+---------+------------+--------------+--------+------+ 
| BadgeNo | EmployeeID | Deactivation | ID_Rem | ID_S | 
+---------+------------+--------------+--------+------+ 
| 1111111 | 100000001 | 2015-01-02 | 9  | 2 | 
+---------+------------+--------------+--------+------+ 
| 2222222 | 100000001 | 2014-01-02 | 9  | 2 | 
+---------+------------+--------------+--------+------+ 

Таблица 3 : tblemployeeactivity

+------------+------------+---------------+-------+ 
| EmployeeID | ADate  | AttritionDate | ID_AT | 
+------------+------------+---------------+-------+ 
| 100000001 | 2015-01-01 | 2015-01-02 | 1  | 
+------------+------------+---------------+-------+ 
| 100000001 | 2014-01-01 | 2014-01-02 | 1  | 
+------------+------------+---------------+-------+ 

Выходной План:

+------------+----------+-----------+-------+-------+---------+--------------+--------+------+------------+---------------+-------+ 
| EmployeeID | LastName | FirstName | ID_SC | ID_ES | BadgeNo | Deactivation | ID_Rem | ID_S | ADate  | AttritionDate | ID_AT | 
+------------+----------+-----------+-------+-------+---------+--------------+--------+------+-----------------------+----+-------+ 
| 100000001 | Margallo | Matt  | 7  | 2  | 1111111 | 2015-01-02 | 9  | 2 | 2015-01-01 | 2015-01-02 | 1  | 
+------------+----------+-----------+-------+-------+---------+--------------+--------+------+------------+---------------+-------+ 

Вопрос: Как может Lastest BadgeNo и AttritionDate в одном запросе предполагается, что tblemployee связан с tblemployeeactivity и то же самое с tblemployee и tblbadge однако tblbadge и tblemployeeactivity не связать вместе в SQL.

Я должен получить полную информацию работника на tblemployee и получать последние данные по каждой таблице (tblbadge & tblemployeeactivity), пожалуйста, см выходного плана, ТИА.

PS. Также я должен фильтровать AttritionDate по Year и Month

+0

'Select а *, b.BadgeNo, б. Deactivation, b.ID_Rem, b.ID_S, c.ADate, c.AttritionDate, c.ID_AT FROM tblemployee a, (SELECT BadgeNo, Deactivation, ID_Rem, ID_S FROM tblbadge WHERE EmployeeID = a.EmployeeID ORDER BY Деактивация DESC LIMIT 1) b , (SELECT ADate, AttritionDate, ID_AT FROM tblemployeeactivity WHERE EmployeeID = a.EmployeeID ORDER BY AttritionDate DESC LIMIT 1) c' Вероятно, это не лучший способ, но дайте это выстрел. – Matt

+0

SQLSTATE [42S22]: Колонка не найдена: 1054 Неизвестная колонка «a.EmployeeID» в разделе «где» «a.EmpoyeeID» не распознается в разделе where –

ответ

0

Этот запрос работает для создания желаемого результата:

SELECT e.employeeid, e.lastname, e.firstname, e.id_sc, e.id_es, 
     q1.badgeno, q1.deact, q1.id_rem, q1.id_s, 
     q2.adate, q2.attritiondate, q2.id_at 
FROM tblemployee e 
INNER JOIN 
    (SELECT b.badgeno, b.employeeid, MAX(b.deactivation) AS deact, b.id_rem, b.id_s 
    FROM tblbadge b 
    GROUP BY b.employeeid) q1 
    ON q1.employeeid = e.employeeid 
INNER JOIN 
    (SELECT a.employeeid, MAX(a.adate) AS adate, a.attritiondate, a.id_at 
    FROM tblemployeeactivity a 
    GROUP BY a.employeeid) q2 
    ON e.employeeid = q2.employeeid 

SQLFiddle:. http://sqlfiddle.com/#!9/64a64a/17

+0

Это сработало, оно буквально сохраняет мои **, Большое вам спасибо, я просто подберу SQL для некоторой фильтрации данных. –

Смежные вопросы