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

Xếp hạng () SQL hoặc một cái gì đó tương tự

Sử dụng LAG chức năng phân tích:

SELECT "Date",
       GREATEST(
         account_balance - LAG(account_balance, 1, 0) OVER (ORDER BY "Date"),
         0
       ) AS credit,
       GREATEST(
         LAG(account_balance, 1, 0) OVER (ORDER BY "Date") - account_balance,
         0
       ) AS debit,
       account_balance
FROM   table_name

Mà, đối với dữ liệu mẫu:

CREATE TABLE table_name ( "Date", account_balance ) AS
SELECT Date '2021-01-01', +1000 FROM DUAL UNION ALL
SELECT Date '2021-01-02', + 500 FROM DUAL UNION ALL
SELECT Date '2021-01-03', - 200 FROM DUAL;

Kết quả đầu ra:

Để tính toán theo hướng ngược lại:

SELECT "Date",
       credit,
       debit,
       SUM(credit-debit) OVER (ORDER BY "Date") AS account_balance
FROM   table_name

Mà, đối với dữ liệu mẫu:

CREATE TABLE table_name ( "Date", credit, debit ) AS
SELECT Date '2021-01-01', 1000,   0 FROM DUAL UNION ALL
SELECT Date '2021-01-02',    0, 500 FROM DUAL UNION ALL
SELECT Date '2021-01-03',    0, 700 FROM DUAL;

Kết quả đầu ra:

db <> fiddle tại đây




  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ách Kiểm tra Giá trị của Tham số NLS trong Cơ sở dữ liệu Oracle

  2. Kết nối không hoạt động của Oracle

  3. Có thể thay đổi thời gian chờ khóa đối tượng mặc định của Oracle không?

  4. Truy vấn đệ quy trong Oracle

  5. Kiểm tra lịch sử của nhiều bảng trong cơ sở dữ liệu