Ayuda en Consulta

27/03/2008 - 21:00 por Jorge | Informe spam
Hola a todos
Una ayuda para hacer una consulta.
Lo que necesito es devolver los 2 ultimos contratos ingresados por cada
auditor.

Tengo la tabla AUDITOR

COD NOM
1 AUDITOR 1
2 AUDITOR 2
3 AUDITOR 3

Y la tabla CONTRATO

NUM CONT COD FEC
1 CONT 1 1 2008-03-21 14:40:04.000
2 CONT 2 1 2008-03-21 14:47:04.000
3 CONT 3 2 2008-03-21 15:17:04.000
4 CONT 4 1 2008-03-22 16:22:04.000
5 CONT 5 2 2008-03-22 16:28:04.000
6 CONT 6 3 2008-03-24 14:04:04.000
7 CONT 7 2 2008-03-25 15:12:04.000
8 CONT 8 2 2008-03-25 15:26:04.000
9 CONT 9 3 2008-03-25 15:38:04.000

Estas 2 tablas se relacionan por el campo COD.

Si hago este query:
SELECT C.COD,A.NOM,C.NUM,C.CON,C.FEC
FROM CONTRATO C INNER JOIN AUDITOR A ON C.COD=A.COD
ORDER BY C.COD,C.FEC DESC

Me devuelve esto:
COD NOM NUM CON FEC

1 AUDITOR 1 4 CONT 4 2008-03-22 16:22:04.000
1 AUDITOR 1 2 CONT 2 2008-03-21 14:47:04.000
1 AUDITOR 1 1 CONT 1 2008-03-21 14:40:04.000
2 AUDITOR 2 8 CONT 8 2008-03-25 15:26:04.000
2 AUDITOR 2 7 CONT 7 2008-03-25 15:12:04.000
2 AUDITOR 2 5 CONT 5 2008-03-22 16:28:04.000
2 AUDITOR 2 3 CONT 3 2008-03-21 15:17:04.000
3 AUDITOR 3 9 CONT 9 2008-03-25 15:38:04.000
3 AUDITOR 3 6 CONT 6 2008-03-24 14:04:04.000

Lo que yo quiero obtener es: (los 2 ultimos contratos ingresados por cada
auditor)
COD NOM NUM CON FEC
-
1 AUDITOR 1 4 CONT 4 2008-03-22 16:22:04.000
1 AUDITOR 1 2 CONT 2 2008-03-21 14:47:04.000
2 AUDITOR 2 8 CONT 8 2008-03-25 15:26:04.000
2 AUDITOR 2 7 CONT 7 2008-03-25 15:12:04.000
3 AUDITOR 3 9 CONT 9 2008-03-25 15:38:04.000
3 AUDITOR 3 6 CONT 6 2008-03-24 14:04:04.000

¿Como hago?

Disculpen lo extenso del mail.

Saludos y gracias
JORGE G:

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
28/03/2008 - 00:15 | Informe spam
Jorge,

Cual version de SQL Server usas?

;with cte
as
(
select
a.*,
b.*,
row_number() over(partition by a.COD order by b.fec DESC) as rn
from
auditor as a
inner join
contrato as b
on a.cod = b.cod
)
select *
from cte
where rn <= 2;


AMB


"Jorge" wrote:

Hola a todos
Una ayuda para hacer una consulta.
Lo que necesito es devolver los 2 ultimos contratos ingresados por cada
auditor.

Tengo la tabla AUDITOR

COD NOM
1 AUDITOR 1
2 AUDITOR 2
3 AUDITOR 3

Y la tabla CONTRATO

NUM CONT COD FEC
1 CONT 1 1 2008-03-21 14:40:04.000
2 CONT 2 1 2008-03-21 14:47:04.000
3 CONT 3 2 2008-03-21 15:17:04.000
4 CONT 4 1 2008-03-22 16:22:04.000
5 CONT 5 2 2008-03-22 16:28:04.000
6 CONT 6 3 2008-03-24 14:04:04.000
7 CONT 7 2 2008-03-25 15:12:04.000
8 CONT 8 2 2008-03-25 15:26:04.000
9 CONT 9 3 2008-03-25 15:38:04.000

Estas 2 tablas se relacionan por el campo COD.

Si hago este query:
SELECT C.COD,A.NOM,C.NUM,C.CON,C.FEC
FROM CONTRATO C INNER JOIN AUDITOR A ON C.COD=A.COD
ORDER BY C.COD,C.FEC DESC

Me devuelve esto:
COD NOM NUM CON FEC

1 AUDITOR 1 4 CONT 4 2008-03-22 16:22:04.000
1 AUDITOR 1 2 CONT 2 2008-03-21 14:47:04.000
1 AUDITOR 1 1 CONT 1 2008-03-21 14:40:04.000
2 AUDITOR 2 8 CONT 8 2008-03-25 15:26:04.000
2 AUDITOR 2 7 CONT 7 2008-03-25 15:12:04.000
2 AUDITOR 2 5 CONT 5 2008-03-22 16:28:04.000
2 AUDITOR 2 3 CONT 3 2008-03-21 15:17:04.000
3 AUDITOR 3 9 CONT 9 2008-03-25 15:38:04.000
3 AUDITOR 3 6 CONT 6 2008-03-24 14:04:04.000

Lo que yo quiero obtener es: (los 2 ultimos contratos ingresados por cada
auditor)
COD NOM NUM CON FEC
-
1 AUDITOR 1 4 CONT 4 2008-03-22 16:22:04.000
1 AUDITOR 1 2 CONT 2 2008-03-21 14:47:04.000
2 AUDITOR 2 8 CONT 8 2008-03-25 15:26:04.000
2 AUDITOR 2 7 CONT 7 2008-03-25 15:12:04.000
3 AUDITOR 3 9 CONT 9 2008-03-25 15:38:04.000
3 AUDITOR 3 6 CONT 6 2008-03-24 14:04:04.000

¿Como hago?

Disculpen lo extenso del mail.

Saludos y gracias
JORGE G:



Respuesta Responder a este mensaje
#2 Jorge
28/03/2008 - 14:45 | Informe spam
Tengo el SQL 2000


"Alejandro Mesa" escribió en el
mensaje news:
Jorge,

Cual version de SQL Server usas?

;with cte
as
(
select
a.*,
b.*,
row_number() over(partition by a.COD order by b.fec DESC) as rn
from
auditor as a
inner join
contrato as b
on a.cod = b.cod
)
select *
from cte
where rn <= 2;


AMB


"Jorge" wrote:

Hola a todos
Una ayuda para hacer una consulta.
Lo que necesito es devolver los 2 ultimos contratos ingresados por cada
auditor.

Tengo la tabla AUDITOR

COD NOM
1 AUDITOR 1
2 AUDITOR 2
3 AUDITOR 3

Y la tabla CONTRATO

NUM CONT COD FEC
1 CONT 1 1 2008-03-21 14:40:04.000
2 CONT 2 1 2008-03-21 14:47:04.000
3 CONT 3 2 2008-03-21 15:17:04.000
4 CONT 4 1 2008-03-22 16:22:04.000
5 CONT 5 2 2008-03-22 16:28:04.000
6 CONT 6 3 2008-03-24 14:04:04.000
7 CONT 7 2 2008-03-25 15:12:04.000
8 CONT 8 2 2008-03-25 15:26:04.000
9 CONT 9 3 2008-03-25 15:38:04.000

Estas 2 tablas se relacionan por el campo COD.

Si hago este query:
SELECT C.COD,A.NOM,C.NUM,C.CON,C.FEC
FROM CONTRATO C INNER JOIN AUDITOR A ON C.COD=A.COD
ORDER BY C.COD,C.FEC DESC

Me devuelve esto:
COD NOM NUM CON FEC

1 AUDITOR 1 4 CONT 4 2008-03-22 16:22:04.000
1 AUDITOR 1 2 CONT 2 2008-03-21 14:47:04.000
1 AUDITOR 1 1 CONT 1 2008-03-21 14:40:04.000
2 AUDITOR 2 8 CONT 8 2008-03-25 15:26:04.000
2 AUDITOR 2 7 CONT 7 2008-03-25 15:12:04.000
2 AUDITOR 2 5 CONT 5 2008-03-22 16:28:04.000
2 AUDITOR 2 3 CONT 3 2008-03-21 15:17:04.000
3 AUDITOR 3 9 CONT 9 2008-03-25 15:38:04.000
3 AUDITOR 3 6 CONT 6 2008-03-24 14:04:04.000

Lo que yo quiero obtener es: (los 2 ultimos contratos ingresados por cada
auditor)
COD NOM NUM CON FEC
-
1 AUDITOR 1 4 CONT 4 2008-03-22 16:22:04.000
1 AUDITOR 1 2 CONT 2 2008-03-21 14:47:04.000
2 AUDITOR 2 8 CONT 8 2008-03-25 15:26:04.000
2 AUDITOR 2 7 CONT 7 2008-03-25 15:12:04.000
3 AUDITOR 3 9 CONT 9 2008-03-25 15:38:04.000
3 AUDITOR 3 6 CONT 6 2008-03-24 14:04:04.000

¿Como hago?

Disculpen lo extenso del mail.

Saludos y gracias
JORGE G:



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