Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Próbuję zrozumieć over() i partycjonowanie przez

Spróbuj zamawiać według daty zamówienia, łatwiej zobaczysz wyniki

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

powinien dać (dodałem puste linie dla jasności)

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

Zauważysz, że wynik jest podzielony na „partycje”, przy czym każda partycja jest zbiorem wierszy z identycznymi datami zamówienia. To właśnie oznacza „partycjonowanie według daty zamówienia”.

W ramach partycji wiersze są uporządkowane według daty zamówienia, zgodnie z drugą klauzulą ​​„(partycja według kolejności według daty zamówienia według daty zamówienia asc)”. Nie jest to zbyt przydatne, ponieważ wszystkie wiersze w partycji będą miały tę samą datę zamówienia. Z tego powodu kolejność wierszy w obrębie partycji jest losowa. Spróbuj zamówić według salesorderid w klauzuli partition by, aby uzyskać bardziej powtarzalny wynik.

row_number() po prostu zwraca kolejność wierszy w każdej partycji



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:Jak liczyć wiersze o wartości NULL i NULL?

  2. Utwórz arkusz kalkulacyjny Excel z bazy danych Oracle

  3. Jak wybrać Top 100 wierszy w Oracle?

  4. Błąd wyjścia SQL Fiddle

  5. Unikaj wstawiania wartości wykładniczej w kolumnie DB Float