Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-06-2013
daragor daragor is offline
Miembro
NULL
 
Registrado: ago 2012
Posts: 91
Poder: 12
daragor Va por buen camino
Ayuda con una consulta necesaria!

Hola amigos, recurro a uds. xq me encuentro sin poder encontrar la solucion a lo q necesito..

Yo tengo una tabla cargada con varios datos, supongamos movimientos de un expte.
Dentro de los datos importantes en cada registro esta el nro. de expte (o codigo unico) y el orden en que se realizó el pase.. mas alla de la fecha y otros datos q no vienen al caso.

N.exp Ord
1001 | 1
1001 | 2
1001 | 3
1002 | 1
1002 | 2
1005 | 1
1005 | 2
1005 | 3
1005 | 4
etc...

Lo que necesito es hacer una consulta que tome todos los expedientes cargados, pero solo el ultimo movimiento de cada uno! el cual esta determinado por el orden (ord).. y asi conseguir un query con esos datos. Expte y Ultimo Movimiento nada más!
Podra alguien ayudarme y decirme como se arma esa consulta, ese SELECT ? muchas gracias!
__________________
Mi Blog: Webscom (Software libre)
Responder Con Cita
  #2  
Antiguo 17-06-2013
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 17
look Va camino a la fama
Cita:
Empezado por daragor Ver Mensaje
Hola amigos, recurro a uds. xq me encuentro sin poder encontrar la solucion a lo q necesito..

Yo tengo una tabla cargada con varios datos, supongamos movimientos de un expte.
Dentro de los datos importantes en cada registro esta el nro. de expte (o codigo unico) y el orden en que se realizó el pase.. mas alla de la fecha y otros datos q no vienen al caso.

N.exp Ord
1001 | 1
1001 | 2
1001 | 3
1002 | 1
1002 | 2
1005 | 1
1005 | 2
1005 | 3
1005 | 4
etc...

Lo que necesito es hacer una consulta que tome todos los expedientes cargados, pero solo el ultimo movimiento de cada uno! el cual esta determinado por el orden (ord).. y asi conseguir un query con esos datos. Expte y Ultimo Movimiento nada más!
Podra alguien ayudarme y decirme como se arma esa consulta, ese SELECT ? muchas gracias!
Código SQL [-]

select 
  distinct n_exp,
 (select max(ord) from registro b where b.n_exp = b.n_exp)as ord
from 
  registro a
__________________
all your base are belong to us
Responder Con Cita
  #3  
Antiguo 17-06-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que también puedes poner algo así:

Código SQL [-]
SELECT nexp, max(ord)
FROM tbExpedientes
group by nexp

Por cierto, para otra vez procura poner un título más descriptivo a tu pregunta, gracias
Responder Con Cita
  #4  
Antiguo 18-06-2013
daragor daragor is offline
Miembro
NULL
 
Registrado: ago 2012
Posts: 91
Poder: 12
daragor Va por buen camino
Muchas gracias compañeros.. lo de casimiro q es mas simple funciona bien, pero.. tengo un problema, no puedo hacer q tome todos los datos de la tabla, solo esos 2 (nexp y ord)
QUE debo agregar para tomar todos los datos?

Gracias!
PD: casimiro no puedo editar el titulo, siempre trato de ser especifico..
__________________
Mi Blog: Webscom (Software libre)
Responder Con Cita
  #5  
Antiguo 18-06-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que necesitas un simple tutorial sql

Añades los campos que quieras al select. Y en el group by pones los mismos campos.
Responder Con Cita
  #6  
Antiguo 18-06-2013
daragor daragor is offline
Miembro
NULL
 
Registrado: ago 2012
Posts: 91
Poder: 12
daragor Va por buen camino
Yo ya habia agregado todos los campos que necesito al select pero no los habia agregado al group by, xq obviamente solo quiero el orden maximo de cada expediente.. no todo..
No funciona como vos me decis casimiro.. se pierde el filtrado de "tomar solo el ord maximo"
__________________
Mi Blog: Webscom (Software libre)
Responder Con Cita
  #7  
Antiguo 18-06-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por daragor Ver Mensaje
Yo ya habia agregado todos los campos que necesito al select pero no los habia agregado al group by, xq obviamente solo quiero el orden maximo de cada expediente.. no todo..
No funciona como vos me decis casimiro.. se pierde el filtrado de "tomar solo el ord maximo"
Pero pon el código que lo veamos
Responder Con Cita
  #8  
Antiguo 18-06-2013
daragor daragor is offline
Miembro
NULL
 
Registrado: ago 2012
Posts: 91
Poder: 12
daragor Va por buen camino
La primera consulta que funciona bien es asi:

Código SQL [-]
SELECT nroex,MAX(ord) FROM temp GROUP BY nroex

Esto me devuelve el nro de expediente y el orden maximo, es decir el ultimo movimiento.. (como vine explicando mas arriba)

Ahora lo q necesitaria es tomar algunos datos mas del expediente.. campos como ser asunto, fecha, folios, etc.

Si aplico como vos decis casimiro, agregando campos al select y al group by, ya no resulta el filtrado de la primera consulta.
Y si, seguro necesito afianzarme en sql, pero por eso estoy aqui solicitando ayuda..
__________________
Mi Blog: Webscom (Software libre)
Responder Con Cita
  #9  
Antiguo 18-06-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Es como he puesto antes, por eso te he dicho que pongas el código que has usado y que no te ha funcionado, para corregirlo.

Código SQL [-]
select nexp, max(ord), uncampo, otrocampo, yuncampomas
from tbExpedientes
group by nexp, uncampo, otrocampo, yuncampomas
Responder Con Cita
  #10  
Antiguo 18-06-2013
daragor daragor is offline
Miembro
NULL
 
Registrado: ago 2012
Posts: 91
Poder: 12
daragor Va por buen camino
OK, no me funciona.. no toma el (ord) mayor.. toma todo.

Código SQL [-]
SELECT nroex,MAX(ord),asu,fec FROM temp GROUP BY nroex,asu,fec
__________________
Mi Blog: Webscom (Software libre)
Responder Con Cita
  #11  
Antiguo 18-06-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cierto, hazlo entonces como ha indicado look
Responder Con Cita
  #12  
Antiguo 18-06-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Daragor.

Creo que la sugerencia de look(*) hace lo que buscas, si bién se puede acelerar un poco de este modo,
Código SQL [-]
SELECT N_EXP, 
       ASUNTO,
       FECHA,
       FOLIOS,
       MAX(ORD) AS ORD
FROM TEMP T1
WHERE ORD = (SELECT MAX(ORD) FROM TEMP T2 WHERE T2.N_EXP = T1.N_EXP)
GROUP BY N_EXP, ASUNTO, FECHA, FOLIOS
ambas son consultas lentas, sobre solamente 5500 registros, la anterior(*) tardó 57.907s y esta 33.508s.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 18-06-2013 a las 18:18:26.
Responder Con Cita
  #13  
Antiguo 18-06-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ecfisa Ver Mensaje
ambas son consultas lentas, sobre solamente 5500 registros, la anterior(*) tardó 57.907s y esta 33.508s.
Muy, muy lentas.
Por eso intenté de la forma que puse antes, pero con más campos parece que no es posible, aunque tampoco me he entretenido mucho en probar.
Responder Con Cita
  #14  
Antiguo 18-06-2013
daragor daragor is offline
Miembro
NULL
 
Registrado: ago 2012
Posts: 91
Poder: 12
daragor Va por buen camino
Hola ecfisa!! ud. como siempre poniendo claridad a los asuntos.. si, efectivamente funciona el codigo. Lo he usado y cumple, claro q es una situacion un poco complicada.. dado que aun debo filtrar por un rango de fecha y por un tipo de destino (osea un pase a un lugar determinado, no todos) pero bueno.. Muchas gracias compañero!!
__________________
Mi Blog: Webscom (Software libre)
Responder Con Cita
  #15  
Antiguo 19-06-2013
Avatar de RONPABLO
[RONPABLO] RONPABLO is offline
Miembro Premium
 
Registrado: oct 2004
Posts: 1.514
Poder: 21
RONPABLO Va por buen camino
y que tan lento o rápido es de esta forma??

Código SQL [-]
with t1 as(
SELECT N_EXP ,MAX(ord) as ord FROM temp GROUP BY N_EXP),

SELECT t2.N_EXP, 
       t2.ASUNTO,
       t2.FECHA,
       t2.FOLIOS,
       t1.ord
FROM TEMP t2
inner t1 on t1.N_EXP = t2.N_EXP
__________________
"Como pasa el tiempo..... ayer se escribe sin H y hoy con H"
Responder Con Cita
  #16  
Antiguo 19-06-2013
daragor daragor is offline
Miembro
NULL
 
Registrado: ago 2012
Posts: 91
Poder: 12
daragor Va por buen camino
RONPABLO, no tengo una base de datos con mas de 5000 registros ahora a mano para probar, seria bueno saber si optimizaste el codigo.. gracias por el aporte!
__________________
Mi Blog: Webscom (Software libre)
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda con consulta SQL mordaz Firebird e Interbase 6 09-02-2013 03:12:36
¿es necesaria la BDE si usamos TDataSource? coso SQL 5 04-08-2008 15:16:17
Ayuda con consulta SQL n03l SQL 4 18-04-2007 22:03:40
Ayuda Con Consulta enecumene Conexión con bases de datos 26 15-07-2006 01:58:06
¿Qué instrucción es necesaria para abrir un archivo PDF? vhirginia Varios 10 07-05-2004 00:05:36


La franja horaria es GMT +2. Ahora son las 00:41:26.


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