Compter le Nombre de jours d'Occurrence de valeurs dans le Tableau
J'ai le tableau ci-dessous
create table #t (Id int, Name char)
insert into #t values
(1, 'A'),
(2, 'A'),
(3, 'B'),
(4, 'B'),
(5, 'B'),
(6, 'B'),
(7, 'C'),
(8, 'B'),
(9, 'B')
Je veux compter des valeurs consécutives dans la colonne nom
+------+------------+
| Name | Repetition |
+------+------------+
| A | 2 |
| B | 4 |
| C | 1 |
| B | 2 |
+------+------------+
La meilleure chose que j'ai essayé est:
select Name
, COUNT(*) over (partition by Name order by Id) AS Repetition
from #t
order by Id
mais il ne me donne pas le résultat escompté
Vous devez vous connecter pour publier un commentaire.
Une approche est la différence des numéros de ligne:
La logique est plus facile à comprendre si vous exécutez la sous-requête et regarder les valeurs de chaque numéro de ligne séparément, puis regardez la différence.
order by max(id)
ajoutée, le résultat serait exactement comme dans le cas des OP post (impliquant l'ordre des enregistrements).J'ai utiliser l'expression de table commune Récursive et de réduire l'utilisation de la fonction row_number,évitez aussi le count(*).
Je pense que ça va mieux fonctionner,mais dans le monde réel, ça dépend quoi d'autre filtre que vous mettez à minimiser le nombre de lignes affectées.
Si l'ID est d'avoir discrète de valeurs, Un extra-CTE sera utiliser pour générer en continu id.