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

Cercando di capire over() e partizionare da

Prova a ordinare in base alla data dell'ordine, vedrai i risultati più facilmente

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

dovrebbe dare (ho aggiunto righe vuote per chiarezza)

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

Noterai che il risultato è diviso in "partizioni", ciascuna partizione è l'insieme di righe con date di ordine identiche. Questo è il significato di "partizione per data dell'ordine".

All'interno di una partizione, le righe sono ordinate per orderdate, come nella seconda clausola di '(partition by orderdate order by orderdate asc)'. Non è molto utile, poiché tutte le righe all'interno di una partizione avranno la stessa data dell'ordine. Per questo motivo, l'ordine delle righe all'interno di una partizione è casuale. Prova a ordinare per salesorderid all'interno della partizione per clausola per avere un risultato più riproducibile.

row_number() restituisce semplicemente l'ordine delle righe all'interno di ciascuna partizione