sql >> Database teknologi >  >> RDS >> Oracle

Forsøger at forstå over() og partitionere efter

Prøv at bestille efter ordredato, du vil nemmere se resultaterne

select Row_Number() over(partition by orderdate order by orderdate asc) 
    as Rownumber, salesorderid, orderdate
from test2
order by orderdate;

burde give (jeg har tilføjet tomme linjer for klarhedens skyld)

ROWNUMBER     SALESORDERID       ORDERDATE
1             43664              07/01/2001

1             43911              08/01/2001
2             43867              08/01/2001
3             43895              08/01/2001
4             43894              08/01/2001
5             43877              08/01/2001

1             44109              09/01/2001

1             44285              10/01/2001

1             44483              11/01/2001
2             44501              11/01/2001

Du vil bemærke, at resultatet er opdelt i 'partitioner', hvor hver partition er sæt rækker med identiske ordredatoer. Det er, hvad "opdeling efter ordredato" betyder.

Inden for en partition er rækkerne sorteret efter ordredato i henhold til den anden klausul af "(partition efter ordredato orden efter ordredato asc)". Det er ikke særlig nyttigt, da alle rækker i en partition vil have den samme ordredato. På grund af det er rækkefølgen af ​​rækkerne i en partition tilfældig. Prøv at bestille efter salgsordre-id inden for partition by-klausulen for at få et mere reproducerbart resultat.

row_number() returnerer bare rækkens rækkefølge inden for hver partition



  1. MySQL-database til at gemme produkt, farve, størrelse og lager

  2. En eller flere databaser pr. Docker-container

  3. SQL Server Data Platform Opgradering i 2015

  4. SQL-overvågning i SQL-udvikler