私はテーブルを持っています:
-Parts-
ID
name
-ReportA-
ID
PART_ID
LOCATION_ID
GPS_ID
USER_ID
VALVE_ID
DATE
-ReportB-
ID
PART_ID
LOCATION_ID
TYPE_ID
NOTES
GPS_ID
DATE
(1) レポート A または B のいずれかを持つすべてのパーツを取得したい:
SELECT
*
FROM
parts
WHERE
id IN (SELECT id FROM reports_a UNION SELECT id FROM reports_b
パーフェクト (1) しかし、最新のレポート (A または B) から LOCATION_ID と GPS_ID を取得する必要があります。
例:
-Parts-
1
Valve
-ReportA-
1
1
4
9
2
12
2013-02-01
-ReportB-
1
1
113
3
"Changed part"
90
2013-03-27
したがって、すべてのパーツとその最新の位置と GPS ID を取得できる SQL スクリプトが必要です。上記の結果は次のようになります。
PART_ID = 1
LOCATION_ID = 113
GPS_ID = 90
そこで、以前の SQL スクリプトを次のように変更します。
SELECT
id AS PART_ID
(
(
SELECT location_id FROM reports_a ORDER BY date DESC
UNION
SELECT location_id FROM reports_b ORDER BY date DESC
)
ORDER BY
date DESC
LIMIT 1
) AS LOCATION_ID
FROM
parts
WHERE
id IN (SELECT id FROM reports_a UNION SELECT id FROM reports_b
ただし、UNION によって返されるフィールドではないため、日付 DESC で注文できませんか?
何か案は??