Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cố gắng hiểu over () và phân vùng theo

Hãy thử đặt hàng theo ngày đặt hàng, bạn sẽ thấy kết quả dễ dàng hơn

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

nên đưa ra (tôi đã thêm các dòng trống cho rõ ràng)

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

Bạn sẽ nhận thấy rằng kết quả được chia thành các 'phân vùng', mỗi phân vùng là tập hợp các hàng có thứ tự giống hệt nhau. Đó là ý nghĩa của 'phân vùng theo ngày đặt hàng'.

Trong một phân vùng, các hàng được sắp xếp theo thứ tự ngày, theo mệnh đề thứ hai của '(phân vùng theo thứ tự theo thứ tự theo thứ tự asc)'. Điều đó không hữu ích lắm, vì tất cả các hàng trong một phân vùng sẽ có cùng một ngày thứ tự. Do đó, thứ tự của các hàng trong một phân vùng là ngẫu nhiên. Hãy thử đặt hàng theo salesorderid trong phân vùng theo điều khoản để có kết quả dễ tái tạo hơn.

row_number () chỉ trả về thứ tự của hàng trong mỗi phân vùng



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có thể sử dụng ứng dụng khách oracle 11g với máy chủ 10g không?

  2. Cơ chế Chèn Cơ sở dữ liệu

  3. Làm cách nào để duyệt cơ sở dữ liệu trên Máy chủ Oracle?

  4. 12c Di chuyển tệp dữ liệu trực tuyến

  5. Cập nhật dấu thời gian trên hàng được tham chiếu có liên quan khi cập nhật hoặc chèn