2 votes

Comportement étrange avec la fonction analytique row_number()

J'espère que quelqu'un pourra m'orienter dans la bonne direction.

Voir la requête ci-dessous.

SELECT day_id,month_id,time_id,
row_number() over (partition BY month_id order by day_id ) rn
FROM minute_bars_fact order by month_id, day_Id, time_id

Produit des résultats :

DAY_ID      MONTH_ID    Time_id rn
02-JAN-11   JAN-2011    1080    1
02-JAN-11   JAN-2011    1081    2
02-JAN-11   JAN-2011    1082    3
02-JAN-11   JAN-2011    1083    4
02-JAN-11   JAN-2011    1084    5
02-JAN-11   JAN-2011    1085    6
02-JAN-11   JAN-2011    1086    7
02-JAN-11   JAN-2011    1087    8

Je m'attendrais à ce que rn ne s'incrémente que pour chaque nouveau jour. Apparemment, ce n'est pas le cas. Est-ce que je fais quelque chose de mal ici ?

Editar:

La journée n'est pas toujours la même.

02-JAN-11   JAN-2011    1436    357
02-JAN-11   JAN-2011    1437    358
02-JAN-11   JAN-2011    1438    359
02-JAN-11   JAN-2011    1439    360
03-JAN-11   JAN-2011    0   361
03-JAN-11   JAN-2011    1   362
03-JAN-11   JAN-2011    2   363
03-JAN-11   JAN-2011    3   364

4voto

Martin Smith Points 174101

Je m'attendrais à ce que rn ne s'incrémente que pour chaque nouveau jour.

Non, c'est incorrect. Vous devez utiliser RANK o DENSE_RANK pour obtenir ce comportement. Pas ROW_NUMBER

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X