La réinitialisation du numéro de Ligne selon les données de l'enregistrement de changement
j'ai obtenu l'ensemble des données comme suit
name date
x 2014-01-01
x 2014-01-02
y 2014-01-03
x 2014-01-04
et je vais essayer d'obtenir ce résultat
name date row_num
x 2014-01-01 1
x 2014-01-02 2
y 2014-01-03 1
x 2014-01-04 1
j'ai essayé d'exécuter cette requête
select name,
date,
row_number () over (partition by name order by date) as row_num
from myTBL
mais malheureusement je obtenir ce résultat
name date row_num
x 2014-01-01 1
x 2014-01-02 2
y 2014-01-03 1
x 2014-01-04 3
s'il vous plaît aider.
la base de données - sql server, oracle, etc. ? quelle est la logique de l'attribution du numéro de ligne de cette façon ? qu'essayez-vous de faire enfin ?
Votre
Pour les futurs askers, cela tombe dans la classe de problèmes connus sous le nom de les lacunes-et-îles.
Votre
partition by
énoncé dit que les partitions sont basées uniquement sur name
. Le résultat obtenu est le résultat que vous avez demandé. Le résultat vous semble vouloir, c'est que les partitions remis à zéro à chaque fois qu'un exécuter de name
changements. Je ne pense pas que vous pouvez le faire avec une simple fonction de fenêtre. Vous aurez besoin d'un ou deux niveaux de sous-requête.Pour les futurs askers, cela tombe dans la classe de problèmes connus sous le nom de les lacunes-et-îles.
OriginalL'auteur erezlale | 2014-12-28
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour identifier les groupes de
names
qui se produisent ensemble. Vous pouvez le faire avec une différence de numéros de ligne. Ensuite, utilisez legrp
pour le partitionnement de larow_number()
:Pour votre exemple de données:
Cela devrait vous donner une idée de la façon dont il fonctionne.
C'est très utile, car il devrait fonctionner sur n'importe quelle base de données qui prend en charge
ROW_NUMBER()
(qui est la plupart d'entre eux) +1.était si grande et innovant!!!
OriginalL'auteur Gordon Linoff