Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-10-2017
identsoft identsoft is offline
Miembro
 
Registrado: abr 2006
Posts: 282
Poder: 19
identsoft Va por buen camino
¿se puede hacer esto en una instrucción sql?

Un saludo para todos.
necesito seleccionar una serie de registros con tres campos: NOMBRE, FECHA VENCIMIENTO, IMPORTE)de una tabla (firebird) que cumplan dos condiciones:
1.- que los registros seleccionados estén entre un rango de fechas (FECHA VENCIMIENTO, es fácil)
2.- que la suma del campo IMPORTE de los registros seleccionados, no supere un importe determinado (vendrá de un tedit).

¿Es posible hacerlo con una instrucción sql o tendré que recorrer la tabla?
Estoy utilizando firebird y dbexpres.
Gracias por adelantado.
Responder Con Cita
  #2  
Antiguo 02-10-2017
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Claro, para filtrar un agregado como SUM utiliza la clausula HAVING:

https://www.w3schools.com/sql/sql_having.asp
__________________
El malabarista.
Responder Con Cita
  #3  
Antiguo 02-10-2017
identsoft identsoft is offline
Miembro
 
Registrado: abr 2006
Posts: 282
Poder: 19
identsoft Va por buen camino
Y como seria? porque esto me da error:
Código SQL [-]
SELECT  NOMBRE, FECHAVTO,  IMPORTE 
FROM VTOSCOBR 
where FECHAVTO between '2017-04-28' and '2017-05-01' 
group by FECHAVTO 
having (sum(importe) < 1000)

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).

lo estoy probando con IBEXPERT antes de hacerlo con DELPHI
Responder Con Cita
  #4  
Antiguo 02-10-2017
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Código SQL [-]
SELECT  NOMBRE, FECHAVTO,  IMPORTE 
FROM VTOSCOBR 
where FECHAVTO between '2017-04-28' and '2017-05-01' 
group by FECHAVTO 
having (sum(importe) < 1000)


te falta agregar el campo Nombre en el group

Group by nombre, fechavto
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #5  
Antiguo 02-10-2017
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 151
Poder: 7
nincillo Va por buen camino
Cita:
Empezado por identsoft Ver Mensaje
Y como seria? porque esto me da error:
Código SQL [-]
SELECT  NOMBRE, FECHAVTO,  IMPORTE 
FROM VTOSCOBR 
where FECHAVTO between '2017-04-28' and '2017-05-01' 
group by FECHAVTO 
having (sum(importe) < 1000)

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).

lo estoy probando con IBEXPERT antes de hacerlo con DELPHI
¿Qué es lo que quieres que te salga como resultado del sql?

* ¿Una fila por cada uno de los recibos del cliente ?
* ¿Una única fila con la suma total de los recibos de cada cliente por día?


Porque dependiendo de lo que necesites realmente, el sql cambiará un poco.
Responder Con Cita
  #6  
Antiguo 02-10-2017
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Cita:
Empezado por nincillo Ver Mensaje
¿Qué es lo que quieres que te salga como resultado del sql?

* ¿Una fila por cada uno de los recibos del cliente ?
* ¿Una única fila con la suma total de los recibos de cada cliente por día?


Porque dependiendo de lo que necesites realmente, el sql cambiará un poco.
si, tiene toda la razon, si involucras la fecha de vencimiento en la consulta te saldran tantos registros como fechas existan
plantea mejor tu consulta, si puedes pon un ejemplo con datos y los resultados que buscas
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #7  
Antiguo 02-10-2017
identsoft identsoft is offline
Miembro
 
Registrado: abr 2006
Posts: 282
Poder: 19
identsoft Va por buen camino
Efectivamente, quiero que me salga una linea (registro) por cada fecha de vencimiento (con su nombre, su fecha de vencimiento y su importe) pero hasta que la suma de los importes seleccionados sea menor o igual que una cantidad determinada (en delphi vendrá de un tedit).

ejemplo: Suma de importes : 100€

CLIENTE FECHA IMPORTE
cliente 1 21-09-2017 40
cliente 2 22-09-2017 30
cliente 3 23-09-2017 20

cliente 4 23-09-2017 30
cliente 5 23-09-2017 20

El sql debe seleccionar cliente1,cliente2 y cliente3, porque si seleccionamos cliente 4, ya sobrepasamos el importe máximo que tenemos que seleccionar

Perdón si no he sabido expresarme mejor. Y sobretodo gracias por vuestro tiempo.
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
Tu mac puede hacer esto????? AzidRain Humor 10 24-11-2010 00:16:25
Se puede hacer esto? Migpal OOP 3 22-10-2005 20:02:30
Se puede hacer esto ??????? AMINOA2R Firebird e Interbase 2 21-10-2005 17:50:59
Se puede hacer esto en POO? adlfv OOP 8 26-09-2005 16:28:55


La franja horaria es GMT +2. Ahora son las 06:25:43.


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