Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Obtener la primera fila por grupos de una consulta anidada (https://www.clubdelphi.com/foros/showthread.php?t=78312)

gluglu 07-04-2012 16:17:47

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

gluglu 07-04-2012 16:26:49

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

ecfisa 07-04-2012 20:09:15

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.:)

Casimiro Notevi 07-04-2012 20:22:00

Sólo comentar que he hecho una prueba con el código de ecfisa y va perfecto :)

gluglu 11-04-2012 12:21:21

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

Casimiro Notevi 11-04-2012 12:36:20

Pues entonces supongo que funcionará el cambiar min por first 1


La franja horaria es GMT +2. Ahora son las 21:25: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