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

Menjalankan total grup berulang berdasarkan item berdasarkan waktu di Oracle SQL

Untuk mendapatkan jumlah yang Anda cari, Anda memerlukan cara untuk mengelompokkan nilai yang Anda minati. Anda dapat membuat ID pengelompokan dengan menggunakan beberapa ROW_NUMBER fungsi analitik, satu dipartisi oleh nilai kunci. Namun karena kebutuhan Anda untuk menduplikasi KEY nilai kolom ini perlu dilakukan dalam beberapa tahap:

WITH t1 AS (
  SELECT dta.*
       , last_value(KEY IGNORE NULLS)          -- Fill in the missing
               OVER (ORDER BY TIME ASC) key2   -- key values
    FROM your_data dta
), t2 AS (
  SELECT t1.*
       , row_number() OVER (ORDER BY TIME)     -- Generate a
       - row_number() OVER (PARTITION BY key2  -- grouping ID
                                ORDER BY TIME) gp
    FROM t1
)
SELECT t2.*
     , sum(amt) OVER (PARTITION BY gp, key2
                          ORDER BY TIME) running_sums
  FROM t2;

Kueri di atas membuat jumlah AMT yang berjalan yang dimulai ulang setiap kali nilai kunci berubah. Sedangkan kueri berikut yang digunakan sebagai pengganti pernyataan pemilihan terakhir di atas memberikan hasil yang diminta, yang tidak akan saya sebut sebagai jumlah berjalan.

SELECT key2
     , MIN(TIME) start_time
     , MAX(TIME) stop_time
     , sum(amt) amt
  FROM t2
 GROUP BY key2, gp;

Untuk melihat nilai waktu penuh, Anda mungkin ingin mengubah NLS_DATE_FORMAT sesi Anda seperti di bawah ini:

ALTER SESSION SET NLS_DATE_FORMAT='DD-MM-RRRR HH24:MI:SS';

Atau bungkus setiap kolom tanggal dalam TO_CHAR fungsi untuk tujuan keluaran.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menghasilkan DDL secara terprogram dari database Oracle?

  2. Bagaimana cara melihat parameter output CLOB di TOAD dari Oracle Stored Procedure?

  3. Tabel Sementara Lokal di Oracle 10 (untuk ruang lingkup Prosedur Tersimpan)

  4. c# membaca Tabel SQL (dengan karakter khusus) ke dalam DataSet

  5. Tanggal cek PL/SQL valid