sql >> Database >  >> RDS >> Oracle

Proberen te begrijpen over() en partitioneren door

Probeer te bestellen op besteldatum, u zult de resultaten gemakkelijker zien

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

zou moeten geven (ik heb lege regels toegevoegd voor de duidelijkheid)

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

U zult zien dat het resultaat is verdeeld in 'partities', waarbij elke partitie de reeks rijen met identieke besteldatums is. Dat is wat 'partitioneren op orderdatum' betekent.

Binnen een partitie zijn de rijen geordend op orderdatum, volgens de tweede clausule van '(partition by orderdate order by orderdate asc)'. Dat is niet erg handig, omdat alle rijen binnen een partitie dezelfde besteldatum zullen hebben. Daarom is de volgorde van de rijen binnen een partitie willekeurig. Probeer te bestellen op verkooporder-id binnen de clausule 'partition by' voor een beter reproduceerbaar resultaat.

row_number() retourneert gewoon de volgorde van de rij binnen elke partitie



  1. Maak een externe sleutel met jpa

  2. Twee tafels, met een op veel relatie. Hoe waarden samen te voegen zonder dubbele rijen?

  3. Een toekomstige tijd weergeven in PostgreSQL

  4. Bron-replica-replicatie configureren in MySQL