Oracle
 sql >> база данни >  >> RDS >> Oracle

Опитвайки се да разбера over() и partition by

Опитайте да поръчате по дата на поръчката, ще видите резултатите по-лесно

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

трябва да даде (добавих празни редове за яснота)

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

Ще забележите, че резултатът е разделен на „дялове“, като всеки дял е набор от редове с идентични подредени дати. Това означава „разделяне по дата на поръчка“.

В рамките на дял редовете са подредени по дата на поръчка, съгласно втората клауза на „(дял по дата на поръчка ред по дата на поръчка възходящ)“. Това не е много полезно, тъй като всички редове в дял ще имат една и съща дата на поръчка. Поради това подреждането на редовете в дял е произволно. Опитайте да поръчате по salesorderid в раздела по клауза, за да получите по-възпроизводим резултат.

row_number() просто връща подреждането на реда във всеки дял



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PLS-00103 Открит символ> грешка при изпълнение на съхранена процедура

  2. Инсталиране на Oracle 9i Developer Suite 2.0 на Windows

  3. Време за изчакване и работен процес на известието за промяна на данни на Oracle

  4. Функция RAWTOHEX() в Oracle

  5. Как да изберете Топ 100 реда в Oracle?