Myslím, že musíte přidat...
AND outside.asset_tag=inside.asset_tag
...na kritéria ve vašem ON
seznam.
Také RIGHT OUTER JOIN
není potřeba. INNER JOIN
poskytne stejné výsledky (a může být efektivnější), protože nebudou existovat kombinace asset_tag
a last_read_date
v poddotazu, které neexistují v mp_vehicle_asset_profile
.
I v tomto případě může dotaz vrátit více než jeden řádek na značku díla, pokud existují „shody“ – tedy více řádků se stejným last_read_date
. Naproti tomu odpověď @Lamak založená na analýze v této situaci libovolně vybere přesně jeden řádek.
Váš komentář naznačuje, že chcete přerušit vazby výběrem řádku s nejvyšší hodnotou mtr_reading
pro last_read_date
.
Chcete-li to provést, můžete upravit odpověď @Lamak na základě analýzy změnou ORDER BY
v OVER
doložka k:
ORDER BY last_read_date DESC, mtr_reading DESC
Pokud stále existují remízy (tj. více řádků se stejným asset_tag
, last_read_date
a mtr_reading
), dotaz opět svévolně vybere přesně jeden řádek.
Moji agregovanou odpověď můžete upravit tak, abyste přerušili vazby pomocí nejvyššího mtr_reading
takto:
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
Pokud stále existují remízy (tj. více řádků se stejným asset_tag
, last_read_date
a mtr_reading
), může dotaz opět vrátit více než jeden řádek.
Dalším způsobem, jak se analytické a agregované odpovědi liší, je jejich zacházení s nulami. Pokud některý z asset_tag
, last_read_date
nebo mtr_reading
jsou null, analytická odpověď vrátí související řádky, ale agregovaná odpověď ne (protože podmínky rovnosti ve spojení nejsou vyhodnoceny jako TRUE
když se jedná o nulu.