PDA

Ver la Versión Completa : Ayuda con una consulta SQL


agova
19-08-2005, 01:12:57
Que tal a todos

Mi problema es el el siguiente:
Tengo una tabla con los siguientes campos

Orden,Bulto,Operacion,Fecha_Recepcion,Hora_Recepcion

y tengo los siguientes datos

1,1,33,15/08/2005,10
1,1,38,15/08/2005,12
1,2,25,13/08/2005,12
1,2,198,14/08/2005,10

Quiero obtener el registro con mayor fecha_recepcion y hora_recepcion (ultimos dos campos)agrupado por los otros tres Orden, Bulto y Operacion

Mi SQL es como sigue

SELECT ORDEN,BULTO,OPERACION,MAX(FECHA_RECEPCION),MAX(HORA_RECEPCION) FROM TABLA
GROUP BY ORDEN,BULTO,OPERACION

pero de nada me sirve porque me regresa exactamente los mismos valores que la tabla original puesto que no debo agrupar por operacion solo por orden y bulto pero si quiero que en el resultado aparezca tambien la operacion.

De antemano gracias y espero su ayuda.
Espero haber sido claro.

aom
19-08-2005, 11:05:07
Hola agova,
no entiendo muy bien cuál es el problema.

Si haces esta sentencia:

SELECT ORDEN,BULTO,OPERACION,MAX(FECHA_RECEPCION),MAX(HORA_RECEPCION)
FROM TABLA
GROUP BY ORDEN,BULTO,OPERACION

te mostrará estos datos

1,1,33,15/08/2005,10
1,1,38,15/08/2005,12
1,2,25,13/08/2005,12
1,2,198,14/08/2005,10

Entiendo que quieres agrupar por orden y bulto y que aparezca la operación y los valores máximos de fecha y hora.
En ese caso, para estos registros

1,1,33,15/08/2005,10
1,1,38,15/08/2005,12

¿qué información te tiene que mostrar?

Saludos

sabinajoa
19-08-2005, 12:32:17
Hola!

No se si he entendido bien tu problema, pero bueno, aqui te paso lo que creo que podrias hacer:

Si haces la Select que tu propones, siempre te saldrán todos los registros, ya que agrupas por operacion y ésta es diferente en todos los registros!!

Simplemente, quitándo del select y del groupby la Operación, te saldrán los siguientes datos

1;1;15/08/2005;12
1;2;14/08/2005;12

Que, segun lo que he entendido yo, son los que necesitas, no?

La sentencia de SQL quedaría así:

SELECT ORDEN,BULTO,MAX(FECHA_RECEPCION),MAX(HORA_RECEPCION) FROM TABLA
GROUP BY ORDEN,BULTO

Si necesitas el campo Operación te será imposible hacerlo, ya que ésta es diferente en cada registro, no puedes sacar la Operación con otra select, a partir de los datos que te proporciona esta??

Espero que te haya ayudado en algo

saludos

agova
19-08-2005, 15:15:40
Gracias a ambos por sus respuestas.

La informacion que necesito que me devuelva es:
Orden, Bulto, Operacion, Maxima Fecha y Maxima Hora

O sea:

1,1,33,15/08/2005,10 --> Este no porque la fecha es igual pero la hora es menor
1,1,38,15/08/2005,12 --> Este si porque es la max hora y max fecha de esta orden,bulto y operacion
1,2,25,13/08/2005,12 -->Este no
1,2,198,14/08/2005,10-->Este si

Entonces la SQL debe devolver
1,1,33,15/08/2005,10
1,2,198,14/08/2005,10

pero necesito que aparezca la operacion también.

Saludos y gracias.

agova
25-08-2005, 15:52:01
Gracias Sabinajoa, he estado pensando en hacerlo como tu dices, olvidarme de la operacion y una vez obtendido el resultado en base a la maxima fecha y maxima hora sacar que operacion es pero no encuentro la forma de hacerlo, ¿podrías darme más pistas de cómo?

De antemano gracias.

aom
25-08-2005, 16:12:37
Hola,
creo que esta consulta no te mostrará la información que deseas.
Si tienes estos dos registros:

1,1,33,15/08/2005,10
1,1,33,14/08/2005,12

creo que te devolverá esto

1,1,33,15/08/2005,12

fijate que tienes el dia más grande y la hora más grande, pero no corresponden al mismo registro por lo cual esa operación no se ha realizado con los datos que has obtenido.

No lo he probado, pero creo que es así.

Saludos

agova
25-08-2005, 18:39:40
Gracias aom

Presisamente lo que escibes en el ejemplo es lo que necesito, solo tengo una duda dices que esta consulta pero ¿Cuál es esa consulta, que devolvera ese registro?

¡gracias¡

Chente(rMan)
25-08-2005, 18:47:26
Que tal agova, y si le haces asi???


SELECT ORDEN,BULTO,max(OPERACION),MAX(FECHA_RECEPCION),MAX(HORA_RECEPCION) FROM TABLA
GROUP BY ORDEN,BULTO

Esto lo digo porque creo que que es campo opearción es unico, ¿cierto?, entonces con esto siempre tendras la fecha y hora mas recientes, espero haberme explicado.


Saludos.

Vicente López.

agova
25-08-2005, 19:07:25
Gracias Chente, pero lo que necesito es que me de el registro con mayor fecha y mayor hora dentro de esa fecha y con esto si tengo tres registros

1,1,1,25/Ago/05,8
1,1,2,24/Ago/05,10
1,1,3,24/Ago/05,12

me debe regresar el registro con mayor fecha y hora o sea el primero

y no uno combinado con el mayor de cada uno, o sea

1,1,3(Mayor operacion->3er registro),25/Ago/05(Max fecha->1er Registro),12(Mayor hora)

saludos

Chente(rMan)
25-08-2005, 20:09:08
Y si le haces de esta manera?

No se que BD esta utilizando.


select top 1 * from tabla
order by fecha_recepcion desc, hora_recepcion desc


espero que ahora si;) .


Saludos.

Vicente López.

aom
26-08-2005, 09:31:30
Hola,
disculpa la consulta es esta:

SELECT ORDEN,BULTO,OPERACION,MAX(FECHA_RECEPCION),MAX(HORA_RECEPCION)
FROM TABLA
GROUP BY ORDEN,BULTO,OPERACION

Gracias Chente, pero lo que necesito es que me de el registro con mayor fecha y mayor hora dentro de esa fecha y con esto si tengo tres registros

Según lo que comentas (y si no he entendido mal :) ), esta consulta no te sirve porqué te mostrará la mayor hora y el mayor día, pero cogidos de registros diferentes con la misma operación.

Saludos

aom
26-08-2005, 10:22:02
Hola,
prueba esta consulta:

SELECT distinct tb.orden, tb.bulto, tb.operacion, (select max(fecha_recepcion) from tabla t where t.operacion=tb.operacion),(select max(hora_recepcion) from tabla t where t.operacion=tb.operacion)
from tabla tb

Saludos

agova
26-08-2005, 22:25:11
Gracias a ambos, ahora voy de salida pero el lunes los probare y les digo si funciona alguna de sus soluciones propuestas.

saludos y gracias.

vhr
29-08-2005, 17:06:15
hola disculpen q me meta pero es posible si es que entendi el problema de q tengas q apelar a query sincronicos, uno andiado en otro tomando parametros el interno del externo, mayormente todos los motores soportan esto desde paradox hasta los mas grandes (Oracle y Postgresql), y si lo probas es posible q access tambien.
select tb1.Orden,tb1.Bulto,tb1.Operacion,tb1.Fecha_Recepcion,tb1.Hora_Recepcion
from tabla as tb1
where (tb1.Fecha_Recepcion,Hora_Recepcion) =
(Select max(tb2.Fecha_Recepcion),max(Hora_Recepcion)
from tabla as tb2
where tb1.Orden = tb2.Orden and
tb1.Bulto = tb2.Bulto )

fijate por si los aportes de los otros miembros no te ayuda, por esta via investigalo