Solution élégante pour un calcul
Bonjour à tous,
Je bloque devant un calcul dont j'aimerai trouver une solution élégante.
J'ai une table définie comme suit :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| declare @data table (DataDate smalldatetime, DataKind int, DataValue int)
insert into @data
select '20140101',0,2
union
select '20140102',0,2
union
select '20140103',0,2
union
select '20140104',1,1
union
select '20140105',0,2
union
select '20140106',2,3
union
select '20140107',0,2
union
select '20140108',0,2 |
La colonne DataKind correspond au type comme suit :
- 0 = Ajouter
- 1 = Soustraire
- 2 = Appliquer
- 3 = Limiter
J’essaie d'éviter de faire une boucle ou un curseur pour gagner en performance.
Les 2 premier type sont simple mais j'ai un problème avec Appliquer.
Code:
1 2 3 4 5 6 7 8 9 10 11
| declare @startdate smalldatetime, @enddate smalldatetime
set @startdate = '20140101'
set @enddate = '20141231';
select sum(case datakind
when 0 then DataValue
when 1 then DataValue*-1
else 0 end)
from @data
where dataDate between @startdate and @enddate) |
Il faudrait que ma variable @startdate contiennent la date du dernier enregistrement de type kind=2 sur l'intervalle de date donné mais je ne sais pas comment faire cela en une seule requête.
Pourriez vous me donner un petit coup de pouce ? :)