2017-01-01 66 views
1

如何獲取聯合表的最大日期值?每當我使用GROUP BY時,我只會得到第一個表的最大日期值。到目前爲止,這是我的代碼:獲取2個聯合表的最大日期結果

SELECT * FROM ((SELECT tc.id, tc.personnel_id, tpi.emp_status, tpi.firstname, tpi.lastname, tc.date_from, tc.date_to FROM tbl_contracts AS tc 
JOIN (SELECT personnel_id, MAX(date_to) AS Maxdatetime 
FROM tbl_contracts 
GROUP BY personnel_id) AS r 
ON tc.personnel_id = r.personnel_id AND tc.date_to = r.Maxdatetime 
LEFT JOIN tbl_personnel_info AS tpi 
ON tpi.id = tc.personnel_id 
WHERE tpi.firstname LIKE CONCAT('%', '', '%') 
AND tpi.lastname LIKE CONCAT('%', '', '%') 
ORDER BY tc.date_to DESC) 
UNION ALL 
(SELECT tpss.id, tpss.personnel_id, tpi.emp_status, tpi.firstname, tpi.lastname, tpss.date_from, tpss.date_to 
FROM tbl_personnel_sea_service AS tpss 
JOIN (
SELECT personnel_id, MAX(date_to) AS Maxdatetime 
FROM tbl_personnel_sea_service 
GROUP BY personnel_id 
) AS r 
ON tpss.personnel_id = r.personnel_id AND tpss.date_to = r.Maxdatetime 
LEFT JOIN tbl_personnel_info AS tpi 
ON tpi.id = tpss.personnel_id 
WHERE tpi.firstname LIKE CONCAT('%', '', '%') 
AND tpi.lastname LIKE CONCAT('%', '', '%') 
AND agency_name = 'UMMI' 
ORDER BY tpss.date_to DESC)) AS tmain 
GROUP BY tmain.personnel_id 

的結果是正確的。但是,如果我使用GROUP BY tmain.personnel_id,排序結果是錯誤的。它沒有得到第二個表的最大日值

Here's the screenshot of result

+0

我只是需要max_date_to的值 –

+0

它應該得到每個用戶的最大date_to結果。 –

+0

我使用了GROUP BY,因爲每個用戶都有多個合同結果。但我只需要最新的日期。 –

回答

1

我建議你通過在所有列走集團化和聚集通過DATE_TO日期和最後的順序(或任何列/ s的需要) -

SELECT personnel_id, 
    emp_status, 
    first_name, 
    lastname, 
    MIN(date_from) date_from, 
    MAX(date_to) date_to 
FROM (
    (SELECT tc.id, 
    tc.personnel_id, 
    tpi.emp_status, 
    tpi.firstname, 
    tpi.lastname, 
    tc.date_from, 
    tc.date_to 
    FROM tbl_contracts AS tc 
    JOIN 
    (SELECT personnel_id, 
     MAX(date_to) AS Maxdatetime 
    FROM tbl_contracts 
    GROUP BY personnel_id 
    ) AS r 
    ON tc.personnel_id = r.personnel_id 
    AND tc.date_to  = r.Maxdatetime 
    LEFT JOIN tbl_personnel_info AS tpi 
    ON tpi.id = tc.personnel_id 
    WHERE tpi.firstname LIKE CONCAT('%', '', '%') 
    AND tpi.lastname LIKE CONCAT('%', '', '%') 
    ORDER BY tc.date_to DESC 
) 
UNION ALL 
    (SELECT tpss.id, 
    tpss.personnel_id, 
    tpi.emp_status, 
    tpi.firstname, 
    tpi.lastname, 
    tpss.date_from, 
    tpss.date_to 
    FROM tbl_personnel_sea_service AS tpss 
    JOIN 
    (SELECT personnel_id, 
     MAX(date_to) AS Maxdatetime 
    FROM tbl_personnel_sea_service 
    GROUP BY personnel_id 
    ) AS r 
    ON tpss.personnel_id = r.personnel_id 
    AND tpss.date_to  = r.Maxdatetime 
    LEFT JOIN tbl_personnel_info AS tpi 
    ON tpi.id = tpss.personnel_id 
    WHERE tpi.firstname LIKE CONCAT('%', '', '%') 
    AND tpi.lastname LIKE CONCAT('%', '', '%') 
    AND agency_name = 'UMMI' 
    ORDER BY tpss.date_to DESC 
)) AS tmain 
GROUP BY personnel_id, 
    emp_status, 
    first_name, 
    lastname 
ORDER BY date_to 
+0

完成。再次感謝新年快樂! –