Ayuda en Consulta

27/03/2008 - 22:14 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 Isaias
28/03/2008 - 17:25 | Informe spam
** Basado en una version de Alejandro Mesa **

CREATE TABLE #PRUEBAS (NUM INT, CONT CHAR(10), COD INT, FEC DATETIME)

INSERT INTO #PRUEBAS VALUES(1,'CONT 1',1,'2008-03-21 14:40:04.000')
INSERT INTO #PRUEBAS VALUES(2,'CONT 2',1,'2008-03-21 14:47:04.000')
INSERT INTO #PRUEBAS VALUES(3,'CONT 3',2,'2008-03-21 15:17:04.000')
INSERT INTO #PRUEBAS VALUES(4,'CONT 4',1,'2008-03-22 16:22:04.000')
INSERT INTO #PRUEBAS VALUES(5,'CONT 5',2,'2008-03-22 16:28:04.000')
INSERT INTO #PRUEBAS VALUES(6,'CONT 6',3,'2008-03-24 14:04:04.000')
INSERT INTO #PRUEBAS VALUES(7,'CONT 7',2,'2008-03-25 15:12:04.000')
INSERT INTO #PRUEBAS VALUES(8,'CONT 8',2,'2008-03-25 15:26:04.000')
INSERT INTO #PRUEBAS VALUES(9,'CONT 9',3,'2008-03-25 15:38:04.000')


select *
from #PRUEBAS as a
where (
select count(*)
from #PRUEBAS as b
where b.COD = a.COD and b.FEC >= a.FEC
) <= 3
order by COD

1 CONT 1 1 2008-03-21 14:40:04.000
2 CONT 2 1 2008-03-21 14:47:04.000
4 CONT 4 1 2008-03-22 16:22:04.000
5 CONT 5 2 2008-03-22 16:28: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
6 CONT 6 3 2008-03-24 14:04:04.000

¿Esto es lo que buscas?

Saludos
IIslas


"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 - 17:37 | Informe spam
Muchas gracias por la ayuda.
Es lo que necesitaba.

Tambien lo logre haciendo un cursor, pero obviamente este query es mas
simple.

JORGE G.


"Isaias" escribió en el mensaje
news:
** Basado en una version de Alejandro Mesa **

CREATE TABLE #PRUEBAS (NUM INT, CONT CHAR(10), COD INT, FEC DATETIME)

INSERT INTO #PRUEBAS VALUES(1,'CONT 1',1,'2008-03-21 14:40:04.000')
INSERT INTO #PRUEBAS VALUES(2,'CONT 2',1,'2008-03-21 14:47:04.000')
INSERT INTO #PRUEBAS VALUES(3,'CONT 3',2,'2008-03-21 15:17:04.000')
INSERT INTO #PRUEBAS VALUES(4,'CONT 4',1,'2008-03-22 16:22:04.000')
INSERT INTO #PRUEBAS VALUES(5,'CONT 5',2,'2008-03-22 16:28:04.000')
INSERT INTO #PRUEBAS VALUES(6,'CONT 6',3,'2008-03-24 14:04:04.000')
INSERT INTO #PRUEBAS VALUES(7,'CONT 7',2,'2008-03-25 15:12:04.000')
INSERT INTO #PRUEBAS VALUES(8,'CONT 8',2,'2008-03-25 15:26:04.000')
INSERT INTO #PRUEBAS VALUES(9,'CONT 9',3,'2008-03-25 15:38:04.000')


select *
from #PRUEBAS as a
where (
select count(*)
from #PRUEBAS as b
where b.COD = a.COD and b.FEC >= a.FEC
) <= 3
order by COD

1 CONT 1 1 2008-03-21 14:40:04.000
2 CONT 2 1 2008-03-21 14:47:04.000
4 CONT 4 1 2008-03-22 16:22:04.000
5 CONT 5 2 2008-03-22 16:28: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
6 CONT 6 3 2008-03-24 14:04:04.000

¿Esto es lo que buscas?

Saludos
IIslas


"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