Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-04-2012
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Obtener la primera fila por grupos de una consulta anidada

Hola a tod@s !

Utilizo Firebird 2.1

Una consulta me devuelve
Código SQL [-]
A B C 1
A B C 2
A B C 3
A B D 2
A B D 3
A B D 4
A B E 3
A B E 4
A B E 5

Lo que quiere es anidar esta consulta en una consulta superior para que el resultado sea
Código SQL [-]
A B C 1
A B D 2
A B E 3

Es decir, que me devuelva el primer registro de la primera consulta, de cada uno de los 'grupos' de los tres primeros campos.

Algo así como :
Código SQL [-]
Select First Row Campo1, Campo2, Campo3, Campo4 from
(Select Campo1, Campo2, Campo3, Campo4 
 from TABLA
 order by Campo1, Campo2, Campo3, Campo4)
group by Campo1, Campo2, Campo3

Agradezco de antemano vuestra ayuda !

Saludos
__________________
Piensa siempre en positivo !
Responder Con Cita
  #2  
Antiguo 07-04-2012
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Creo que he formulado mal la pregunta en cuanto al tema del Order By de la primera consulta.

Añado que el resultado de la primera consulta, el Campo 4 no tiene por qué estar ordenado, y lo que necesito sería el primer valor agrupado por los tres primeros campos, que sí están ordenados.

Si fuera como lo expuse anteriormente, entonces podría utilizar la función agregada Max()

Cita:
Select First Row Campo1, Campo2, Campo3, Campo4 from
(Select Campo1, Campo2, Campo3, Campo4
from TABLA
order by Campo1, Campo2, Campo3)
group by Campo1, Campo2, Campo3
__________________
Piensa siempre en positivo !
Responder Con Cita
  #3  
Antiguo 07-04-2012
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 gluglu.

A ver si entendí bien... probá de este modo:
Código SQL [-]
SELECT CAMPO1,CAMPO2,CAMPO3,CAMPO4
FROM PRUEBA
WHERE CAMPO4 = (SELECT MIN(CAMPO4) FROM PRUEBA T2
                WHERE T2.CAMPO1 = PRUEBA.CAMPO1
                  AND T2.CAMPO2 = PRUEBA.CAMPO2
                  AND T2.CAMPO3 = PRUEBA.CAMPO3)

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 07-04-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.011
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Sólo comentar que he hecho una prueba con el código de ecfisa y va perfecto
Responder Con Cita
  #5  
Antiguo 11-04-2012
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Gracias a todos por responder, y lamento no haber podido contestar antes, pero estuve fuera.

Precisamente esa solución funciona correctamente pero no me vale, ya que como indiqué en mi rectificación, los valores de CAMPO4 no tienen por qué estar ordenados de mínimo a máximo, o seguir ningún orden.

En ese caso sabía que se podía utilizar Min o Max, ya que en otros hilos otros compañeros me ayudaron con una cuestión parecida.

Lo que preciso es obtener la primera fila independientemente del orden de Campo4.

Gracias de nuevo
__________________
Piensa siempre en positivo !
Responder Con Cita
  #6  
Antiguo 11-04-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.011
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues entonces supongo que funcionará el cambiar min por first 1
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Consulta Anidada farrop SQL 1 04-07-2006 20:28:06
Consulta anidada Malon SQL 5 07-05-2004 18:58:45
Consulta anidada fjcg02 SQL 6 05-02-2004 09:47:58
consulta anidada pzala SQL 2 14-12-2003 23:43:16
consulta sql anidada davidgaldo SQL 2 13-11-2003 15:42:00


La franja horaria es GMT +2. Ahora son las 05:17:07.


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