Jag tror att du måste lägga till...
AND outside.asset_tag=inside.asset_tag
...till kriterierna i din ON
lista.
Även en RIGHT OUTER JOIN
behövs inte. En INNER JOIN
kommer att ge samma resultat (och kan vara mer effektiva), eftersom det inte kommer att finnas kombinationer av asset_tag
och last_read_date
i underfrågan som inte finns i mp_vehicle_asset_profile
.
Även då kan frågan returnera mer än en rad per tillgångstagg om det finns "band" -- det vill säga flera rader med samma last_read_date
. Däremot kommer @Lamaks analytiska svar godtyckligt att välja exakt en rad i denna situation.
Din kommentar antyder att du vill bryta banden genom att välja raden med högst mtr_reading
för last_read_date
.
Du kan ändra @Lamaks analysbaserade svar för att göra detta genom att ändra ORDER BY
i OVER
klausul till:
ORDER BY last_read_date DESC, mtr_reading DESC
Om det fortfarande finns kopplingar (det vill säga flera rader med samma asset_tag
, last_read_date
och mtr_reading
), kommer frågan återigen abortärt välja exakt en rad.
Du kan ändra mitt aggregatbaserade svar för att bryta band med högsta mtr_reading
enligt följande:
SELECT
outside.asset_tag,
outside.description,
outside.asset_type,
outside.asset_group,
outside.status_code,
outside.license_no,
outside.rentable_yn,
outside.manufacture_code,
outside.model,
outside.manufacture_vin,
outside.vehicle_yr,
outside.meter_id,
outside.mtr_uom,
outside.mtr_reading,
outside.last_read_date
FROM
mp_vehicle_asset_profile outside
INNER JOIN
(
SELECT
asset_tag,
MAX(last_read_date) AS last_read_date,
MAX(mtr_reading) KEEP (DENSE_RANK FIRST ORDER BY last_read_date DESC) AS mtr_reading
FROM
mp_vehicle_asset_profile
GROUP BY
asset_tag
) inside
ON
outside.asset_tag = inside.asset_tag
AND
outside.last_read_date = inside.last_read_date
AND
outside.mtr_reading = inside.mtr_reading
Om det fortfarande finns kopplingar (det vill säga flera rader med samma asset_tag
, last_read_date
och mtr_reading
), kan frågan återigen returnera mer än en rad.
Ett annat sätt att de analytiska och aggregatbaserade svaren skiljer sig åt är i deras behandling av nollor. Om någon av asset_tag
, last_read_date
, eller mtr_reading
är null, kommer det analytiskt baserade svaret att returnera relaterade rader, men det aggregatbaserade svaret kommer inte att returnera det (eftersom likhetsvillkoren i kopplingen inte utvärderas till TRUE
när en noll är inblandad.