2017-01-01 3 views
1

Wie bekomme ich den maximalen Datumswert einer Union-Tabellen? Immer wenn ich GROUP BY verwende, erhalte ich nur den maximalen Datumswert der ersten Tabelle. Bisher ist hier mein Code:Erhalten Sie das maximale Datum Ergebnis von 2 Union-Tabellen

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 

Das Ergebnis ist korrekt. Wenn ich jedoch GROUP BY tmain.personnel_id verwende, ist das Sortierergebnis falsch. Es ist nicht immer den max Datumswert der zweiten Tabelle

Here's the screenshot of result

+0

Ich brauche nur die maximale date_to Wert –

+0

es sollte die maximale date_to Ergebnis von jedem Benutzer bekommen. –

+0

Ich habe GROUP BY verwendet, weil es ein mehrfaches Ergebnis des Vertrags pro Benutzer gibt. Aber ich brauche nur das späteste Datum. –

Antwort

1

Ich würde vorschlagen, dass Sie die Gruppe nehmen, indem über die ganze Spalte und aggregieren das Datum und schließlich, um von DATE_TO (oder je nachdem, welcher Spalte/s Sie brauchen) -

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

Fertig. Nochmals vielen Dank und Frohes neues Jahr! –

Verwandte Themen