sql >> Databáze >  >> RDS >> Oracle

Snažím se pochopit over() a rozdělení podle

Zkuste objednávat podle data objednávky, výsledky uvidíte snadněji

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

by měl dát (pro přehlednost jsem přidal prázdné řádky)

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

Všimnete si, že výsledek je rozdělen do 'oddílů', přičemž každý oddíl je sada řádků s identickými daty objednávky. To je to, co znamená „rozdělení podle data objednávky“.

V rámci oddílu jsou řádky seřazeny podle data objednávky podle druhé věty „(oddíl podle data objednávky seřazení podle data objednávky asc)“. To není příliš užitečné, protože všechny řádky v oddílu budou mít stejné datum objednávky. Z tohoto důvodu je řazení řádků v oddílu náhodné. Zkuste seřadit podle salesorderid v rámci oddílu podle klauzule, abyste měli reprodukovatelnější výsledek.

row_number() pouze vrací pořadí řádků v rámci každého oddílu



  1. Jak se mám během místního vývoje s Kubernetes/minikube připojit k databázi postgres běžící na localhost?

  2. dynamické předávání názvu tabulky a sloupce pomocí vazebných proměnných

  3. PDO připravte příkaz a porovnejte s ním v booleovském režimu

  4. Zavaděč SQL - druhý řetězec není přítomen