Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   problema sql primeros elementos (https://www.clubdelphi.com/foros/showthread.php?t=33950)

cuscus 21-07-2006 13:21:16

problema sql primeros elementos
 
tengo un problema con una sql. Imaginemos una tabla con id_cliente e id_factura
yo quiero sacar todas aquellas facturas que cumplan una condicion(hasta ahi perfecto), pero solo aquellas cuyo cliente no tenga una factura posterior, osea q ese cleinte no tenga una id_factura superior, ademas las facturas posteriores no tienen xq cumplir la condicion de las facturas que busco.
Le estoy dando vueltas y vueltas y no consigo hacerlo en una sola sql.
A ver si podeis echarme una mano
Gracias

gluglu 21-07-2006 14:14:33

No sé si he entendido bien tu pregunta. A lo mejor la podrías detallar un poco más.

En cualquier caso, si ya tienes la id_factura para la cual quieres imponer la condición de búsqueda, simplemente bastaría con agregarle esa condición adicional al select diciendo que todas aquellas facturas que sean superiores a ese id_factura que tienes, pues no se listen.

Si no es este el caso, deberías pensar a lo mejor en select anidado.

Si detallas un poco más, a lo mejor es más fácil dar con una solución.

Saludos

cuscus 21-07-2006 15:35:51

no el id_factura no le se xq la select me tiene que devolver varias facturas.Expecifico mas
imaginate que quiero todas las facturas que superen los 100 euros pero de ellas solo aquellas cuyos clientes no tengan otra factura posterior.

No se si este ejemplo es mas especifico

gluglu 21-07-2006 16:24:07

Sigo sin entender a qué te refieres cuando dices '... cuyos clientes no tengan otra factura posterior'.

Posterior a qué factura ? Qué condición es la que impones ?

Sigo diciendo que pruebes con un Select anidado : algo así como
Código SQL [-]
Select * from TABLA
where id_factura > (Select Max(Id_Factura) from TABLA where Total_Factura > 100)

No sé si esto te sirve de ayuda.

cuscus 21-07-2006 16:41:18

ante todo gluglu, gracias por echarme una mano, lo de lso clientes que no tengan una factura posterior a ver si me puedo explicar mejor
imaginate q tengo el cliente 1 , el 2 , l 3 y el 4
id_cliente id_factura total
1 1 125
2 2 150
2 3 115
3 4 140

el resultado de la consulta que quiero hacer , me deberia devolver todos menos el segundo registro, el de 150 euros, xq ese cliente tiene una factura posterior, pero si me deberia devolver el registro de 115 , xq auqnue es del mismo cliente, esa factura no tiene otra posterior para ese cliente, no se si asi queda mas claro

droguerman 21-07-2006 21:03:14

a ver voy a suponer que tu condicion es la fecha si tu gestor soporta consultas anidadas podrias intentar:
Código SQL [-]
select * FROM FACTURA
WHERE fecha>= :fecha AND
idCliente NOT IN (SELECT idCliente FROM FACTURA where fecha<: fecha)

ojala os sirva

cuscus 24-07-2006 08:49:29

hola, gracias droguerman.
El problema con el que me encuentro en tu sql es que la fecha de la 2º select no la tengo, no puedo ponerla, ya que seria la fecha la factura resultante de la propia select, no se si me explico. Si estoy buscando facturas apartir del 1 enero que no haya posteriormente mas facturas de ese cliente, la fecha de la 2º sql no seria 1 de enero, seria la fecha de facturacion de la primera factura de ese cliente, no se si se entiende

gluglu 24-07-2006 11:32:53

Algo así como esto :

Código SQL [-]
Select CL.*,
(Select Max(ID_FACTURA) from CLIENTES CL2 where CL2.ID_CLIENTE = CL.ID_CLIENTE) as MAX_FAC
from CLIENTES CL
where ID_FACTURA = MAX_FAC

cuscus 24-07-2006 11:59:07

MUCHISIMAS GRACIAS
en realidad no necesitaba el elemento maximo, sino saber si hay alguno posterior, asi que cambiando el max por un count en tu sql me ha valido, te agradezco muchisimo la solucion

un saludo


La franja horaria es GMT +2. Ahora son las 23:28:39.

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