Re: Consula por periodos actuales

From: "Guillermo E(dot) Villanueva" <guillermovil(at)gmail(dot)com>
To: raul andrez gutierrez alejo <raulandrez(at)gmail(dot)com>
Cc: Ruben Fitó <r(dot)fito(at)ubiquat(dot)com>, "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-16 03:52:11
Message-ID: CANm+PCCA7Sn69NC2kgry373AcZxt5JECfpJrWYXUW7u3reCobw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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 <
raulandrez(at)gmail(dot)com> 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ó <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 Ruben Fitó 2014-06-16 09:46:57 Re: Consula por periodos actuales
Previous Message Gilberto Castillo 2014-06-13 18:50:49 Re: Consulta recursiva