我有一個包含 3 個月資料的交易表:
詢問:
SELECT a.branch,
a.dt_acc,
a.ct_id,
TRUNC(a.date, 'MONTH'),
COUNT(*) a_count
FROM a_transactions a
WHERE a.v_date BETWEEN '01.03.2019' and '31.05.2019'
GROUP BY a.branch, a.dt_acc, a.ct_id, TRUNC(a.date, 'MONTH');
結果:
| 分支 | ACC | ID | TRUNC(A.DATE,'MONTH') | A_COUNT |
|---|---|---|---|---|
| 1 | 3 | 154 | 01.03.2019 | 1 |
| 1 | 3 | 154 | 01.04.2019 | 1 |
| 1 | 3 | 154 | 01.05.2019 | 1 |
每個月,a_count 列印一條記錄。我需要a_count來統計前幾個月的金額,即如果3月份a_count等于1,4月份也有記錄,a_count應該已經是2了,如果5月份也有記錄,那么a_count應該是 3
我需要這個結果:
| 分支 | ACC | ID | TRUNC(A.DATE,'MONTH') | A_COUNT |
|---|---|---|---|---|
| 1 | 3 | 154 | 01.03.2019 | 1 |
| 1 | 3 | 154 | 01.04.2019 | 2 |
| 1 | 3 | 154 | 01.05.2019 | 3 |
uj5u.com熱心網友回復:
你在這里描述的正是滑動視窗函式。根據您的 sql 方言,語法可能會有所不同,但通常您可以使用:
select a.branch, a.dt_acc, a.ct_id, trunc(a.date,'MONTH'),
count(*) over (order by a.date rows between unbounded preceding and current row) a_count
from a_transactions a
where a.v_date between '01.03.2019' and '31.05.2019'
group by a.branch, a.dt_acc, a.ct_id, trunc(a.date,'MONTH');
uj5u.com熱心網友回復:
您可以像這樣使用累積總和:
WITH YOUR_SQL AS (
SELECT A.BRANCH, A.DT_ACC, A.CT_ID, TRUNC(A.DATE,'MONTH') MM , COUNT(*) A_COUNT
FROM A_TRANSACTIONS A
WHERE A.V_DATE BETWEEN '01.03.2019' AND '31.05.2019'
GROUP BY A.BRANCH, A.DT_ACC, A.CT_ID, TRUNC(A.DATE,'MONTH')
)
SELECT Y.* , SUM (A_COUNT) OVER (ORDER BY MM,BRANCH,DT_ACC,CT_ID) CUM_SUM
FROM YOUR_SQL Y
uj5u.com熱心網友回復:
您可以直接使用(無需使用子查詢)SUM(COUNT()) OVER ()作為分析函式,例如
SELECT branch,
dt_acc,
ct_id,
TO_CHAR("date", 'yyyy') AS year,
TRUNC("date", 'MONTH') AS first_day_of_month,
COUNT(*) AS a_count,
SUM(COUNT(*)) OVER
(PARTITION BY TO_CHAR("date", 'yyyy')
ORDER BY TRUNC("date", 'MONTH')) AS a_count_sum
FROM a_transactions
WHERE v_date BETWEEN date'2019-03-01' and date'2019-05-31'
GROUP BY branch, dt_acc, ct_id, TO_CHAR("date", 'yyyy'), TRUNC("date", 'MONTH')
在哪里
- 使用
date'yyyy-mm-dd'格式是一個好習慣,以防止日期文字問題與資料庫的日期設定無關 date是保留字,除非參考(例如,您的列假定為"date"),否則不能用作列名- 考慮到其他年份也是一個好主意。也許您即將發布的資料將傳播一年以上(例如,日期間隔可能會延長至一年以上)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/387404.html
