FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Consulta Limitada
Hola amigos,
Tengo un Problema... En una tabla tengo los siguientes campos Cliente, Factura y Valor_Factura. Necesito contar los campos de esta tabla ordenados por Valor_Factura descendentemente, pero solo hasta que la sumatoria del Campo Valor_Factura No sea mayor a un valor dado..por ej:$500.000.. Es decir me interesa saber ¿Cuántas Facturas suman $500.000. o al menos se aproxime ordenadas como les dije ya por el campo del valor en forma descendente..... Espero haberme hecho entender... Si puden ayudarme les agradezco de antemano.
__________________
No hay metas imposibles... sólo barreras mentales. |
#2
|
|||
|
|||
Parece
Que es una solucion de Where, en verdad, no te haces entender, o es que es tan simple la respuesta.
Saludos Fer |
#3
|
|||
|
|||
algo asi
Select count(*) from facturas
where monto_factura < 500000 Para contar, no te hace falta orden...si, parece que no te he entendido...o si.? Saludos Otra vez Fer |
#4
|
|||
|
|||
Reconfirmación
Es que lo que pasa es esto:
La tabla seria asi: Ordenada por valor descendentemente Cliente Factura Valor Julio G. 00001 180.000 Antonio 00005 120.000 Andres 00002 90.000 Maria 00008 50.000 Josefa 00007 40.000 Camilo 00004 20.000 Ahora necesito contar los registros hasta que la suma de los valores de la factura sea menor o igual a $400.000 La Repuesta seria (3) Por que la sumatoria de los tres primeros registros 180.000+120.000+90.000=390.000 si le sumamos el cuarto registro se pasaria a 440.000 y el limite es $400.000... espero que ahora me halla hecho entender mejor
__________________
No hay metas imposibles... sólo barreras mentales. |
#5
|
|||
|
|||
Si estás trabajando con una base de datos relacional (Interbase, Firebird, Oracle, SQL-Server, Informix, DB2, MySQL u otra), la mejor opción sería a través de un procedimiento almacenado que recorra la tabla y acumule en una variable local al procedimiento el total. Cuando llegues al monto deseado (antes de que te pases), deberías cortar el recorrido de la tabla y devolver el último valor.
Otra opción es a través de un método, función o procedimiento directamente con Delphi haciendo lo mismo (recorrer la tabla e ir acumulando hasta alcanzar el valor). Por supuesto lo primero que tienes que hacer (antes de acumular) ver si te pasas o no del vaor deseado y luego: acumular; o cortar el procedimiento. Esto es fácil siempre que lo que necesites sea recorrer la tabla secuencialmente; ahora bien, si lo que necesitas es calcular el valor más aproximado, considerando todos los registros posibles, ya tienes que recurrir a un procedimiento recursivo y ver que sumatoria (de las posibles) te cae mejor. Por supuesto, esto llevaría mucho más tiempo de procesamiento y muchos más recursos (memoria). |
#6
|
|||
|
|||
Para Fudolph
Amigo Fudolph ...
Agradezco tu recomendacion... yo lo habia craneado asi... pero pense que depronto por SQL.. podia encontrar una consulta condicionada que me diera el dato rapidamente. estoy trabajando con Interbase De todas formas gracias por las recomendaciones
__________________
No hay metas imposibles... sólo barreras mentales. |
#7
|
|||
|
|||
Se me ocurrio otra cosa
Hola..Pensando otra cosa ...
Alguien sabe como por SQL.. puedo seleccionar los 10,20,30....n... mejores campos de una tabla? Es decir como un Top 10 Gracias
__________________
No hay metas imposibles... sólo barreras mentales. |
#8
|
|||
|
|||
Nuevamente, depende del motor con el que estás trabajando (cosa que deberías indicar). Igual, si se trata de Firebird 1.5 (no Interbase), la consulta debería tener la forma:
"select first n * from..." No recuerdo exactamente, pero creo que también era posible hacer ago por el estilo en Oracle. Sino, la otra opción es a través de un procedimiento almacenado, donde le deberías pasar la cantida de registros a mostrar y procesar la tabla a través de un "for do.." o un "for each..." (según el motor) y una variable de control, hasta llegar a la cantidad que necesites para luego terminar el procedimiento. |
|
|
|