Obtener el máximo

09/03/2008 - 20:19 por Andresj | Informe spam
Hola,

Teniendo una tabla con los campos:

ID (int, autonumerico)
IDPersonal (int)
FechaRevision (smallDateTime)

y teniendo en cuenta que IDPersonal puede estar repetido (un trabajador
puede haber pasado varias revisiones), como puedo obtener la última fecha
para cada trabajador, además del campo ID?

Con SELECT MAX(FechaRevision) FROM TABLE GROUP BY IDPersonal, obtengo la
última fecha. Pero quisiera además obtener el campo ID. Se puede hacer en
una sola conulta?

Grácias.

Preguntas similare

Leer las respuestas

#1 Juan Diego Bueno
09/03/2008 - 20:52 | Informe spam
Hola Andrés:

Se puede hacer de otras formas, pero creo que la más legible sería esta:


WITH PERSONAL(IDPERSONAL, ULTFECHA)
AS
(
SELECT IDPERSONAL, MAX(FechaRevision) FROM TABLE GROUP BY IDPersonal
)
SELECT T.ID, T.IDPERSONAL, P.ULTFECHA FROM TUTABLA
INNER JOIN PERSONAL P ON T.IDPERSONAL=P.IDPERSONAL

Saludos

Juan Diego Bueno www.moondance.es

"Andresj" escribió en el mensaje
news:
Hola,

Teniendo una tabla con los campos:

ID (int, autonumerico)
IDPersonal (int)
FechaRevision (smallDateTime)

y teniendo en cuenta que IDPersonal puede estar repetido (un trabajador
puede haber pasado varias revisiones), como puedo obtener la última fecha
para cada trabajador, además del campo ID?

Con SELECT MAX(FechaRevision) FROM TABLE GROUP BY IDPersonal, obtengo la
última fecha. Pero quisiera además obtener el campo ID. Se puede hacer en
una sola conulta?

Grácias.

Respuesta Responder a este mensaje
#2 Alejandro Mesa
09/03/2008 - 21:52 | Informe spam
Andresj,

select *
from t1 as a
where a.FechaRevision = (
select max(b.FechaRevision)
from t1 as b
where b.IDPersonal = a.IDPersonal
)
go

select a.*
from t1 as a inner join (
select IDPersonal , max(FechaRevision) as max_FechaRevision
from t1
group by IDPersonal
) as b on a.IDPersonal = b.IDPersonal
and a.FechaRevision = b.max_FechaRevision
go

;with cte
as
(
select
*,
dense_rank() over(partition by IDPersonal order by FechaRevision DESC) as
rn
from
t1
)
select *
from cte
where rn = 1
go

Me inclino mas por la ultima. Para esta, se puede crear el sgte indice para
ayudar al rendimiento de esta.

(IDPersonal, FechaRevision DESC)


Suponiendo que [ID] es clave primaria y usa indice clustered.

AMB


"Andresj" wrote:

Hola,

Teniendo una tabla con los campos:

ID (int, autonumerico)
IDPersonal (int)
FechaRevision (smallDateTime)

y teniendo en cuenta que IDPersonal puede estar repetido (un trabajador
puede haber pasado varias revisiones), como puedo obtener la última fecha
para cada trabajador, además del campo ID?

Con SELECT MAX(FechaRevision) FROM TABLE GROUP BY IDPersonal, obtengo la
última fecha. Pero quisiera además obtener el campo ID. Se puede hacer en
una sola conulta?

Grácias.



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida