Pregunta Oracle selecciona el registro de fecha más reciente


Estoy tratando de encontrar el registro más reciente basado en un campo de fecha. Cuando configuro latest = 1 en la cláusula where, obtengo un error. Por favor ayuda si es posible. FECHA es el campo por el que estoy clasificando. He intentado ambos últimos = 1 y último = '1'

SELECT 
STAFF_ID,
SITE_ID,
PAY_LEVEL,
ROW_NUMBER() OVER (PARTITION BY STAFF_ID ORDER BY DATE DESC) latest

 FROM OWNER.TABLE
WHERE   END_ENROLLMENT_DATE is null 
AND latest = 1

5
2018-06-20 21:07


origen


Respuestas:


no puede usar alias de la lista de selección dentro de la cláusula WHERE (debido a la Orden de evaluación de una sentencia SELECT)

tampoco puedes usar OVER cláusula dentro de la cláusula WHERE - "Puede especificar funciones analíticas con esta cláusula en la lista de selección o en la cláusula ORDER BY". (cita de docs.oracle.com)

select *
from (select
  staff_id, site_id, pay_level, date, 
  max(date) over (partition by staff_id) max_date
  from owner.table
  where end_enrollment_date is null
)
where date = max_date

12
2018-06-20 21:26



Creo que intentaría con MAX algo como esto:

SELECT staff_id, max( date ) from owner.table group by staff_id

luego enlace en sus otras columnas:

select staff_id, site_id, pay_level, latest
from owner.table, 
(   SELECT staff_id, max( date ) latest from owner.table group by staff_id ) m
where m.staff_id = staff_id
and m.latest = date

0
2018-06-20 21:10



Suponiendo que staff_id + date forme un Reino Unido, este es otro método:

SELECT STAFF_ID, SITE_ID, PAY_LEVEL
  FROM TABLE t
  WHERE END_ENROLLMENT_DATE is null
    AND DATE = (SELECT MAX(DATE)
                  FROM TABLE
                  WHERE staff_id = t.staff_id
                    AND DATE <= SYSDATE)

0
2018-06-20 21:17



select *
from (select
  staff_id, site_id, pay_level, date, 
  rank() over (partition by staff_id order by date desc) r
  from owner.table
  where end_enrollment_date is null
)
where r = 1

0
2018-01-28 13:24