Vous n'êtes pas identifié(e).

#1 Re : Général » Calcul de moyenne sur 2 mois » 17/11/2012 22:27:30

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

Pied de page des forums

Propulsé par FluxBB