Bonjour à tous,

Je bloque devant un calcul dont j'aimerai trouver une solution élégante.

J'ai une table définie comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?