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
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 |