2017-01-01 26 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

私は最大のdate_to値が必要です –

+0

各ユーザーの最大のdate_to結果が得られるはずです。 –

+0

私はGROUP BYを使用しました。なぜなら、ユーザーごとに契約の結果が複数あるからです。しかし、私は最新の日付が必要です。おそらく将来は –

答えて

1

私はあなたがすべてのカラム上でグループを取る示唆してDATE_TO日付、最終的に順序を集約(またはいずれかの列/あなたが必要だと思います第二のテーブルの最大日付値を取得していません) -

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

完了。もう一度おめでとう、お正月! –

関連する問題