Để 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.