1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
-- Max du mois en cours
select id_codcom, max(nu_val) mois
from matable
where convert(varchar(6), dt_val, 112) = convert(varchar(6), dbo.GetDate(), 112)
group by id_codcom
-- Max du mois précédent (enfin, max pour mois < mois en cours, on sais jamais, si nu_val n'a pas bougé pendant plus de 30 jours...)
select id_codcom, max(nu_val) mois_precedent
from matable
where convert(varchar(6), dt_val, 112) < convert(varchar(6), dbo.GetDate(), 112)
-- Max du mois précédent (pour de vrai)
select id_codcom, max(nu_val) mois_precedent
from matable
where convert(varchar(6), dt_val, 112) = convert(varchar(6), dateadd('m', -1, dbo.GetDate(), 112)
-- Du coup, la requête finale
select id_codcom, sum(val) diff
from
(
select id_codcom, max(nu_val) mois
from matable
where convert(varchar(6), dt_val, 112) = convert(varchar(6), dbo.GetDate(), 112)
group by id_codcom
union all
select id_codcom, max(nu_val) * -1 mois_precedent
from matable
where convert(varchar(6), dt_val, 112) < convert(varchar(6), dbo.GetDate(), 112)
)
group by id_codcom |
Partager