Re: Consula por periodos actuales

From: raul andrez gutierrez alejo <raulandrez(at)gmail(dot)com>
To: Ruben Fitó <r(dot)fito(at)ubiquat(dot)com>
Cc: "jvenegasperu (dot)" <jvenegasperu(at)gmail(dot)com>, "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Consula por periodos actuales
Date: 2014-06-13 13:49:30
Message-ID: CAHQFj70sS7S+CqfEPudvV6M2a7Q9HywdhLvVuWKnhe-E=Xm+vw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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ó <r(dot)fito(at)ubiquat(dot)com> 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 . <jvenegasperu(at)gmail(dot)com>:
>
> 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ó <r(dot)fito(at)ubiquat(dot)com> 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] r(dot)fito(at)ubiquat(dot)com
>>> <j(dot)catarineu(at)ubiquat(dot)com>
>>> 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: jvenegasperu(at)php(dot)net
>> jvenegasperu(at)gmail(dot)com
>>
>> PHP Spanish Docs translator member.
>> http://www.php.net/manual/es/index.php
>>
>
>
>
> --
> *Ruben Fitó *
> Software Engineer
> [image: Ubiquat Technologies, SL] r(dot)fito(at)ubiquat(dot)com
> <j(dot)catarineu(at)ubiquat(dot)com>
> 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

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message cDaniel GE 2014-06-13 17:26:15 Consulta recursiva
Previous Message Ruben Fitó 2014-06-13 13:01:24 Re: Consula por periodos actuales