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

Chạy tổng số trên nhóm lặp lại theo các mục dựa trên thời gian trong Oracle SQL

Để nhận được số tiền bạn đang tìm kiếm, bạn cần có cách để nhóm các giá trị mà bạn quan tâm. Bạn có thể tạo ID nhóm bằng cách sử dụng một vài ROW_NUMBER các hàm phân tích, một hàm được phân chia theo giá trị khóa. Tuy nhiên do nhu cầu của bạn sao chép KEY giá trị cột, điều này sẽ cần được thực hiện trong một vài giai đoạn:

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;

Truy vấn trên tạo ra một tổng số AMT đang chạy khởi động lại mỗi khi giá trị khóa thay đổi. Trong khi truy vấn sau được sử dụng thay cho câu lệnh chọn cuối cùng ở trên cho kết quả được yêu cầu, mà tôi sẽ không gọi là tổng đang chạy.

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

Để xem các giá trị toàn thời gian, bạn có thể muốn thay đổi phiên của mình NLS_DATE_FORMAT như bên dưới:

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

Hoặc bọc mỗi cột ngày trong một TO_CHAR chức năng cho các mục đích đầu ra.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chèn nhiều SQL vào nhiều hàng

  2. Cách THÊM TÊN CONSTRAINT vào một CONSTRAINT đã TỒN TẠI

  3. Truy vấn bảng và tên cột được lưu trữ trong bảng

  4. Xóa hàng con và hàng mẹ bằng một tập lệnh SQL

  5. Cách sử dụng các biến liên kết Oracle với LIKE trong C #