Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Rank() SQL Atau Sesuatu seperti itu

Gunakan LAG fungsi analitik:

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

Yang, untuk data sampel:

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;

Keluaran:

Untuk menghitung dalam arah yang berlawanan:

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

Yang, untuk data sampel:

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;

Keluaran:

db<>fiddle di sini




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengekspor file urutan ke Oracle oleh Sqoop

  2. Apakah ini Masalah Microsoft atau Oracle?

  3. Nonaktifkan pemicu masuk di Oracle

  4. Cara memperbaiki oracle.sql.ArrayDescriptor, oracle.sql.STRUCT, dan oracle.sql.StructDescriptor yang tidak digunakan lagi

  5. Bagaimana saya bisa memecahkan NoClassDefFoundError?