Re: Suma de columna en una semana

From: Jaime Casanova <jaime(dot)casanova(at)2ndquadrant(dot)com>
To: Brunhilde Sibeth <bruma13sibeth(at)gmail(dot)com>
Cc: POSTGRES <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Suma de columna en una semana
Date: 2018-02-08 17:59:57
Message-ID: CAJGNTeOqik6O+b5QHTDMhL0y12o5oLG9j_8JkceShkUrPF5-qA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

2018-02-08 11:40 GMT-05:00 Brunhilde Sibeth <bruma13sibeth(at)gmail(dot)com>:
> Buenas a todos!
>
> Es la primera vez que consulto a la lista, espero puedan ayudarme y reciba
> alguna orientación o respuesta.
> En la actualidad me estoy familiarizando con el postgresql.
>
> Lo que necesito es sumar una columna de una tabla (valor en horas) , el
> inconveniente que encuentro es que la suma debe ser por semana, dentro del
> rango de un mes.
>
> Tengo algo armado así, pero necesito que el control me haga detectando la
> fecha de inicio y fin de la semana
> según la fecha en la que está el puntero (hace un recorrido por fila /fecha
> dentro de la tabla), esta consulta sería una condición para realizar otra
> operación dentro de un CASE, ya que la cantidad de la suma de horas no debe
> ser mayor a 8 hs en una semana.
>
> Espero ansiosa que puedan ayudarme.
>
> SELECT SUM(HORAS)
> FROM tabla
> WHERE personal_id= ?
> AND fecha BETWEEN ‘2018-02-01’ AND ‘2018-02-28’
> AND EXTRACT (DOW from fecha) IN (1,2,3,4,5,6)
> ORDER BY fecha
>

alguna razón por la que pides que ignore el domingo? "EXTRACT (DOW
from fecha) IN (1,2,3,4,5,6)"

Ahora, para que la suma sea por semana deberías usar algo así aunque
se te dará el número de semana del año. Si quieres el número de semana
del mes habría que ver tu definición de semana; por ejemplo: si el mes
empieza en domingo, esa sería la primera semana? o la siguiente?
especialmente considerando que estas ignorando los domingos pero la
misma pregunta se puede hacer si el mes empieza en sábado o cuentas de
sábado a sábado?

SELECT EXTRACT(week from fecha), SUM(HORAS)
FROM tabla
WHERE personal_id= ?
AND fecha BETWEEN ‘2018-02-01’ AND ‘2018-02-28’
AND EXTRACT (DOW from fecha) IN (1,2,3,4,5,6)
GROUP BY 1
ORDER BY fecha;

una posible solución si cuentas la semana de domingo a domingo sería:

SELECT EXTRACT(week from fecha), SUM(HORAS)
FROM tabla
WHERE personal_id= ?
AND fecha BETWEEN ‘2018-02-01’ AND ‘2018-02-28’
GROUP BY EXTRACT(week from fecha)
ORDER BY 1;

o

WITH horas_semana (semana, horas) AS (SELECT EXTRACT(week from fecha),
SUM(HORAS)
FROM tabla
WHERE
personal_id= ?

AND fecha BETWEEN ‘2018-02-01’ AND ‘2018-02-28’
GROUP
BY EXTRACT(week from fecha))
SELECT row_number() over (), horas
FROM horas_semana
ORDER BY semana;

--
Jaime Casanova www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message jvenegasperu . 2018-02-09 05:14:57 Permisos para usuario por columnas
Previous Message Brunhilde Sibeth 2018-02-08 16:40:14 Suma de columna en una semana