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.