Vous n'êtes pas identifié(e).
Pages : 1
Bonsoir,
-- Je crée une 1er table de données test avec des dates et un int pour la moyenne.
-- Je crée une 2eme table avec les extrémités des bimestres, début et fin.
-- Je join les deux tables avec un BETWEEN
-- Les extremités filtrent les données ...
-- Un GROUP BY permet la moyenne
-------- données test -------------------------------------
DROP TABLE IF EXISTS mytable ;
SELECT
generate_series (
current_date - interval '1 year',
current_date + interval '1 year',
'1 day') AS mydate,
( random()* 1000)::INT AS myctr
INTO public.mytable ;
-- SELECT * FROM public.mytable ;
-------- 1er jour de chaque bimestre -------------------------------------
DROP TABLE IF EXISTS bim_items;
SELECT
generate_series (
CASE WHEN mod(extract('month' from current_date)::int , 2) = 0
THEN date_trunc('month', CURRENT_DATE ) - interval '13 months'
ELSE date_trunc('month', CURRENT_DATE ) - interval '12 months'
END , -- début de la serie,
current_date , -- fin de la serie,
'2 month') -- intervalle de la serie
AS bim_deb,
NULL::DATE AS bim_fin
INTO bim_items
;
---------- Dernier jour de chaque bimestre-----------------------------------
UPDATE bim_items
SET bim_fin = bim_deb + (interval '2 months' - interval '1 day')
;
--------- Filtre by JOIN ... BETWEEN ------------------------------------
SELECT bim_deb , bim_fin , avg(myctr )::NUMERIC(6,2)
FROM bim_items
JOIN mytable ON mydate BETWEEN bim_deb AND bim_fin
GROUP BY bim_deb, bim_fin
ORDER BY bim_deb, bim_fin
Pages : 1