Creo que necesitas agregar...
AND outside.asset_tag=inside.asset_tag
...a los criterios de su ON
lista.
También una RIGHT OUTER JOIN
no es necesario. Una INNER JOIN
dará los mismos resultados (y puede ser más eficiente), ya que no habrá combinaciones de asset_tag
y last_read_date
en la subconsulta que no existe en mp_vehicle_asset_profile
.
Incluso entonces, la consulta puede devolver más de una fila por etiqueta de recurso si hay "empates", es decir, varias filas con la misma last_read_date
. Por el contrario, la respuesta basada en análisis de @Lamak elegirá arbitrariamente exactamente una fila de esta situación.
Su comentario sugiere que desea desempatar eligiendo la fila con mayor mtr_reading
para la last_read_date
.
Puede modificar la respuesta basada en análisis de @Lamak para hacer esto cambiando ORDER BY
en el OVER
cláusula a:
ORDER BY last_read_date DESC, mtr_reading DESC
Si todavía hay vínculos (es decir, varias filas con el mismo asset_tag
, last_read_date
y mtr_reading
), la consulta volverá a seleccionar automáticamente exactamente una fila.
Podría modificar mi respuesta basada en agregados para romper empates usando la mtr_reading
más alta de la siguiente manera:
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
Si todavía hay vínculos (es decir, varias filas con el mismo asset_tag
, last_read_date
y mtr_reading
), la consulta puede volver a devolver más de una fila.
Otra forma en que difieren las respuestas analíticas y las basadas en agregados es en el tratamiento de los valores nulos. Si alguno de asset_tag
, last_read_date
, o mtr_reading
son nulos, la respuesta basada en análisis devolverá filas relacionadas, pero la respuesta basada en agregados no lo hará (porque las condiciones de igualdad en la unión no se evalúan como TRUE
cuando se trata de un valor nulo.