Creo que deberías diseñar la base de datos de manera que puedas consultar de otra/s tabla/s cuales son los intervalos de tiempo de cada cliente
Guillermo Villanueva El 13 de junio de 2014, 10:49, raul andrez gutierrez alejo < [email protected]> escribió: > Hola Ruben. > > la solución es floor( (to_char(fecha_venta,'DD')::int-1)/ 15 ) esto calcula > si es la primer quincena(0) o la segunda(1) quincena, aunque el 31 lo debe > validar ya que (31-1)/15=2 > > ejemplo. > > select floor((to_char('2014-06-13'::date,'DD')::int-1)/ 15 ) , > floor((to_char('2014-06-23'::date,'DD')::int-1)/ 15 ) , > floor((to_char('2014-07-31'::date,'DD')::int-1)/ 15 ) > union all > select floor((to_char('2014-06-13'::date,'DD')::int-1)/ 5 ) , > floor((to_char('2014-06-23'::date,'DD')::int-1)/ 5 ) , > floor((to_char('2014-07-31'::date,'DD')::int-1)/ 5 ) > > > > El 13 de junio de 2014, 8:01, Ruben Fitó <[email protected]> escribió: > > Hola, >> >> gracias por la respuesta, perdón si no me he sabido explicar, pero no >> necesito obtener la fecha de hace 10 días o 15 días sino la fecha del >> inicio del período de facturación. >> >> Un caso de uso seria: >> >> - Un cliente tiene configurado que se le facturará cada 10 días, >> empezando por el día 1 de cada mes. >> - Entonces, para que no se pase de ventas, en cada transacción hemos >> de mirar la suma de importes des de cada inicio de período: >> - caso A) Si estamos en el dia 5 del mes, se sumaran los importes >> del dia 1,2,3,4 y 5. >> - caso B) Si estamos en el dia 18 del mes, se sumaran los importes >> del dia 11, 12, 13, 14, 15,16, 17 y 18. >> - caso C) Si estamos en el dia 25 del mes, se sumaran los importes >> del dia 21, 22, 23, 24 y 25. >> >> Con ello, lo que quiero decir es según el período de facturación, me diga >> la fecha inicial con la que he de empezar a buscar: >> >> Ejemplo gráfico (cada 10 dias): >> >> *1,* 2, 3, 4, 5, 6, 7, 8, 9, 10, *11*, 12, 13, 14, 15, 16, 17, 18, 19, >> 20, *21,* *............ *último dia del mes >> |----------------------------| |-------------------------------------| >> |----------------------------------| >> >> Si estamos a día 13, la función que necesito me tendría que devolver la >> fecha del *dia 11* del mes, ya que ha partir de aquí he de calcular la >> suma de importes. >> >> No se si me he podido explicar mejor. jejeje >> >> Gracias, >> >> saludos >> >> >> >> >> >> >> >> >> 2014-06-13 14:40 GMT+02:00 jvenegasperu . <[email protected]>: >> >> Hola Ruben buenos dias >>> >>> para esos casos puedes usar interval >>> >>> select current_date, current_date - interval '10 day' as hace_10_dias; >>> >>> select current_date, current_date - interval '15 day' as hace_15_dias; >>> >>> http://www.postgresql.org/docs/9.3/static/functions-datetime.html >>> >>> >>> saludos >>> >>> >>> El 13 de junio de 2014, 7:10, Ruben Fitó <[email protected]> escribió: >>> >>> Hola, >>>> >>>> me gustaría saber si existe alguna función en postgres que me permita >>>> buscar por diferentes "períodos" de mes, sin necesidad de hacer cálculos de >>>> periodos. >>>> >>>> Me explico, tenemos clientes que facturan cada mes, cada semana o >>>> cada 10 días(por mes), o sea que mensualmente: >>>> >>>> Cliente 1(por mes) se facturaran la compras realizadas des de el 1 >>>> hasta final de mes. >>>> Cliente 2(por quincenas) se le facturaran las compras del 1 al 15 y del >>>> 15 hasta final de mes. >>>> Cliente 3(cada 10 días) se le facturaran las compras del 1 al 10, del >>>> 11 al 20 y del 21 a final de mes. >>>> >>>> Del mismo modo hay necesidad de hacer los cálculos de consumo por >>>> período en tiempo de ejecución, o sea, cuánto ha consumido hasta "ahora", >>>> en su periodo de facturación actual(mensual, quincenal o cada 10 días). >>>> >>>> Actualmente ahora tenemos en una función de bbdd los cálculos >>>> necesarios para determinar las fechas del periodo de facturación actual, >>>> pero hay necesidad de aplicar otro tipo de periodos(*semanalmente*, >>>> por ejemplo) en otros ámbitos y nos gustaría saber si existe alguna función >>>> en postgres que me permita distribuir los meses por diferentes periodos. >>>> >>>> Un ejemplo de lo que digo seria: >>>> >>>> SELECT sum(importe) FROM ventas WHERE cliente=12345 AND fecha_venta >>>> BETWEEN *inicio_periodo('X dias')* AND now(); >>>> >>>> >>>> *incio_periodo* seria la función postgres donde le paso los días de >>>> duración del periodo, o también podría pasar una fracción del mes. No sé >>>> algo así. >>>> >>>> Una manera que he encontrado para hacerlo seria buscar las ventas del >>>> mes actual o de la semana actual. >>>> >>>> SELECT sum(importe) FROM ventas WHERE cliente=12345 fecha_venta >>>> BETWEEN (SELECT date_trunc('*MONTH*',now())::DATE) AND now(); --> para >>>> el mes actual. >>>> SELECT sum(importe) FROM ventas WHERE cliente=12345 fecha_venta >>>> BETWEEN (SELECT date_trunc('*WEEK*',now())::DATE) AND now(); --> para >>>> la semana actual. >>>> ?? --> Para la quincena actual >>>> ?? --> Para "decena" actual >>>> >>>> El problema está en que no puedo filtrar 'cada 10 dias' o 'cada >>>> quinzena' en esta consulta. >>>> >>>> Como lo veis, hay algo que pueda ayudarme?? >>>> >>>> >>>> Muchas gracias de antemano. >>>> >>>> Saludos >>>> >>>> >>>> -- >>>> *Ruben Fitó * >>>> Software Engineer >>>> [image: Ubiquat Technologies, SL] [email protected] >>>> <[email protected]> >>>> www.ubiquat.com >>>> Tota la informació continguda en aquest document i arxius adjunts és >>>> CONFIDENCIAL protegida per llei de secret comercial. Si l'ha rebut per >>>> error, si us plau elimini'l i posi's en contacte amb l'emissor. >>>> >>>> All information contained in this document and any attachments are >>>> CONFIDENTIAL and protected under trade secret laws. If you receive this >>>> message by mistake, please delete it and notify it immediately to the >>>> sender. >>>> >>> >>> >>> >>> -- >>> José Mercedes Venegas Acevedo >>> cel: Mov. 949808846 >>> >>> mails: [email protected] >>> [email protected] >>> >>> PHP Spanish Docs translator member. >>> http://www.php.net/manual/es/index.php >>> >> >> >> >> -- >> *Ruben Fitó * >> Software Engineer >> [image: Ubiquat Technologies, SL] [email protected] >> <[email protected]> >> www.ubiquat.com >> Tota la informació continguda en aquest document i arxius adjunts és >> CONFIDENCIAL protegida per llei de secret comercial. Si l'ha rebut per >> error, si us plau elimini'l i posi's en contacte amb l'emissor. >> >> All information contained in this document and any attachments are >> CONFIDENTIAL and protected under trade secret laws. If you receive this >> message by mistake, please delete it and notify it immediately to the >> sender. >> > > > > -- > Raul Andres Gutierrez Alejo >
