Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-08-2005
agova agova is offline
Miembro
 
Registrado: may 2003
Posts: 69
Poder: 21
agova Va por buen camino
Angry Ayuda con una consulta SQL

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.
Responder Con Cita
  #2  
Antiguo 19-08-2005
Avatar de aom
aom aom is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 106
Poder: 22
aom Va por buen camino
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
__________________
Más se perdió en la guerra... y volvieron cantando
Responder Con Cita
  #3  
Antiguo 19-08-2005
sabinajoa sabinajoa is offline
Miembro
 
Registrado: abr 2005
Posts: 17
Poder: 0
sabinajoa Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 19-08-2005
agova agova is offline
Miembro
 
Registrado: may 2003
Posts: 69
Poder: 21
agova Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 25-08-2005
agova agova is offline
Miembro
 
Registrado: may 2003
Posts: 69
Poder: 21
agova Va por buen camino
Unhappy

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.
Responder Con Cita
  #6  
Antiguo 25-08-2005
Avatar de aom
aom aom is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 106
Poder: 22
aom Va por buen camino
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
__________________
Más se perdió en la guerra... y volvieron cantando
Responder Con Cita
  #7  
Antiguo 25-08-2005
agova agova is offline
Miembro
 
Registrado: may 2003
Posts: 69
Poder: 21
agova Va por buen camino
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¡
Responder Con Cita
  #8  
Antiguo 25-08-2005
Avatar de Chente(rMan)
Chente(rMan) Chente(rMan) is offline
Miembro
 
Registrado: ago 2005
Posts: 89
Poder: 19
Chente(rMan) Va por buen camino
Que tal agova, y si le haces asi???

Código SQL [-]
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.
Responder Con Cita
  #9  
Antiguo 25-08-2005
agova agova is offline
Miembro
 
Registrado: may 2003
Posts: 69
Poder: 21
agova Va por buen camino
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
Responder Con Cita
  #10  
Antiguo 25-08-2005
Avatar de Chente(rMan)
Chente(rMan) Chente(rMan) is offline
Miembro
 
Registrado: ago 2005
Posts: 89
Poder: 19
Chente(rMan) Va por buen camino
Y si le haces de esta manera?

No se que BD esta utilizando.

Código SQL [-]
select top 1 * from tabla
order by fecha_recepcion desc, hora_recepcion desc

espero que ahora si .


Saludos.

Vicente López.
Responder Con Cita
  #11  
Antiguo 26-08-2005
Avatar de aom
aom aom is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 106
Poder: 22
aom Va por buen camino
Smile

Hola,
disculpa la consulta es esta:

SELECT ORDEN,BULTO,OPERACION,MAX(FECHA_RECEPCION),MAX(HORA_RECEPCION)
FROM TABLA
GROUP BY ORDEN,BULTO,OPERACION
Cita:
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
__________________
Más se perdió en la guerra... y volvieron cantando
Responder Con Cita
  #12  
Antiguo 26-08-2005
Avatar de aom
aom aom is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona
Posts: 106
Poder: 22
aom Va por buen camino
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
__________________
Más se perdió en la guerra... y volvieron cantando
Responder Con Cita
  #13  
Antiguo 26-08-2005
agova agova is offline
Miembro
 
Registrado: may 2003
Posts: 69
Poder: 21
agova Va por buen camino
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.
Responder Con Cita
  #14  
Antiguo 29-08-2005
vhr vhr is offline
Miembro
 
Registrado: feb 2005
Ubicación: Argentina- Buenos Aires- Quilmes
Posts: 28
Poder: 0
vhr Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 01:04:47.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi