0
votes

Query SQL pour calculer le compteur de fonctionnement en fonction de la valeur précédente

J'ai une table avec vdateTime, colonne de catégorie. Je veux une colonne avec un nombre incrémental basé sur la valeur de la catégorie précédente. I.E Si la catégorie actuelle est la même que celle du compteur précédent sera incrémentation sinon elle se réinitialisera à 1. J'utilise dense_rank () mais comment réinitialiser la valeur si la valeur antérieure n'est pas la même que celle actuelle? xxx

 Entrez la description de l'image ici


2 commentaires

S'il vous plaît, postez des données d'exemple comme texte.


4/27/2010 16:12 KCLK 1 6/15/2010 17:40 Kcle 1 7/12/2010 10:29 KCLK 2 8/13/2010 10:41 KCLK 3 8/13/2010 11:33 Kcle 2 8/17/2010 15:37 Kcle 3 9/1/2010 11:10 Kcle 4 9/17/2010 10:37 kcle 5 21 21 21 21 9/06/2010 12:22 Kcle 6 9/27/2010 15:38 Kcle 7 9/28/2010 14:11 KXAMC 1 10/8/2010 11:18 KCLK 4 10/8/2010 15:45 Kcle 8


3 Réponses :


1
votes

Ceci est un problème de lacunes et de îles. Je suggérerais la différence de numéros de ligne: xxx


0 commentaires

0
votes

Vous pouvez essayer avec une autre approche possible à l'aide des fonctions de fenêtre lag () code> et somme () code>:

table: p> xxx Pré>

Déclaration: P>

;WITH ChangesCTE AS (   
   SELECT 
      vDateTime, category, 
      CASE WHEN LAG(Category) OVER (ORDER BY vDateTime) = Category THEN 0 ELSE 1 END AS [Change]
   FROM Data   
), GroupsCTE AS (
   SELECT 
      vDateTime, category, 
      SUM([Change]) OVER (ORDER BY vDateTime) AS [Group]
   FROM ChangesCTE
)   
SELECT 
   vDateTime, category, 
   ROW_NUMBER() OVER (PARTITION BY [Group] ORDER BY vDateTime) AS rn
FROM GroupsCTE


0 commentaires

0
votes

Une option utiliserait Lag () fonction analytique une fois et Somme () sur () sur () fonction analytique deux fois comme xxx

démo


0 commentaires