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
Eso es lo que necesito.
Responder Con Cita
  #2  
Antiguo 02-10-2017
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 151
Poder: 8
nincillo Va por buen camino
Cita:
Empezado por identsoft Ver Mensaje
Eso es lo que necesito.
Entonces creo que lo que necesitas es algo así:

Código:
SELECT  NOMBRE, FECHAVTO,  SUM(IMPORTE) AS Total
FROM VTOSCOBR 
where FECHAVTO between '2017-04-28' and '2017-05-01' 
group by NOMBRE, FECHAVTO
having (sum(importe) < 1000)
--ORDER by LO QUE QUIERAS.....
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
No es eso lo que busco.
Lo que intento sacar es todos los vencimientos comprendidos entre dos fecha (independientemente de si es el mismo cliente o es la misma fecha) pero (y aquí viene la cuestión) que la suma de lo que voy seleccionando( el importe total , no la suma del importe por cliente ) no supere el importe que le diga.

En forma de bucle seria:
leo registro 1 ; sumimporte = sumimporte + importe
si sumimporte > importeseleccionado salgo del bucle
si no
leo registro2 sumimporte = sumimporte + importe
si sumimporte > importeseleccionado salgo del bucle
sino
leo registro3......

algo así pero en forma de sql

gracias nincillo
Responder Con Cita
  #4  
Antiguo 02-10-2017
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 151
Poder: 8
nincillo Va por buen camino
Me temo que eso para un sql "normal" es bastante complicado.

Creo que tendrías que hacerlo utilizando algún cursor o algo así.
Responder Con Cita
  #5  
Antiguo 02-10-2017
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Es posible con Sql normal, pero todo depende del motor y su version. En el caso de Firebird, desde la version 3:

https://www.firebirdsql.org/file/com...3windowing.pdf
__________________
El malabarista.
Responder Con Cita
  #6  
Antiguo 02-10-2017
nincillo nincillo is offline
Miembro
 
Registrado: may 2017
Posts: 151
Poder: 8
nincillo Va por buen camino
Cita:
Empezado por mamcx Ver Mensaje
Es posible con Sql normal, pero todo depende del motor y su version. En el caso de Firebird, desde la version 3:

https://www.firebirdsql.org/file/com...3windowing.pdf
Menudo pedazo de manual interesante...
Pero no son horas para digerir algo tan "denso".

Me lo apunto para mañana, pero me implicaría cambiar a la versión 3, que hasta ahora no había pasado de la 2.5 por temor a incompatibilidades.
Responder Con Cita
  #7  
Antiguo 02-10-2017
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.913
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Pero las funciones windows LO VALEN. Son geniales y resuelven un montón de escenarios.

P.D: Y si uno tiene la opción, es bueno siempre ir actualizando el motor a lo ultimo. No solo porque por lo general mejoran desempeño y resuelven bugs, sino porque el SQL se ha ido actualizando!

A proposito, asi es como quedaria:

Código SQL [-]
-- Puse los datos en memoria pa testear
WITH datos AS (
SELECT 'cliente 1' as cliente, '21-09-2017' as fecha, 40 AS importe
UNION ALL
SELECT 'cliente 2', '22-09-2017', 30
UNION ALL
SELECT 'cliente 3', '23-09-2017', 20
UNION ALL
SELECT 'cliente 4', '23-09-2017', 30
UNION ALL
SELECT 'cliente 5', '23-09-2017', 20
)

SELECT * FROM (
   -- Aqui es la magia. Usando la funcion WINDOW SUM que recorre (como un FOR) ordenado por cliente. Es importante tener en cuenta el orden. Esto acumula la suma
    SELECT *, SUM(importe) OVER (ORDER BY cliente) AS acumulado FROM datos
) reporte
-- Y por ultimo se filtra
WHERE acumulado < 100
__________________
El malabarista.
Responder Con Cita
  #8  
Antiguo 02-10-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.055
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por mamcx Ver Mensaje
Es posible con Sql normal, pero todo depende del motor y su version. En el caso de Firebird, desde la version 3:
https://www.firebirdsql.org/file/com...3windowing.pdf
Vaya, más cosas para estudiar
Responder Con Cita
  #9  
Antiguo 03-10-2017
identsoft identsoft is offline
Miembro
 
Registrado: abr 2006
Posts: 282
Poder: 19
identsoft Va por buen camino
Genial!!
El problema es que trabajo con firebird 2.5
Hay que estudiar la posibilidad del cambio.
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 00:07:57.


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