在嘗試從Oracle 的SQL 轉Doris時,建立View邏輯,而因為需要計算上個月的金額跟去年同期的金額,使用到lag的指令,
但驗算資料時,發現(1)DOR_AMT金額正確,但count筆數跟Oracle不同 (2)去年同期無跟上個月的金額錯誤
Doris的View SQL
select
STAT_YM,
FACT_NO,
CURRENCY,
ACC_NO,
EXPENSE_NO,
EXPENSE_TYPE,
sum(DOR_AMT) as DOR_AMT,
sum(LM_DOR_AMT) as LM_DOR_AMT
sum(LY_DOR_AMT) as LY_DOR_AMT
from (
SELECT
STAT_YM,
FACT_NO,
CURRENCY,
ACC_NO,
EXPENSE_NO,
EXPENSE_TYPE,
LAG(DOR_AMT, 1, 0) OVER (PARTITION BY FACTORY, ACCOUNT ORDER BY ,FACT_NO,ACC_NO) AS LM_DOR_AMT,
LAG(DOR_AMT, 12, 0) OVER (PARTITION BY FACTORY, ACCOUNT ORDER BY STAT_YM,FACT_NO,ACC_NO) AS LY_DOR_AMT
FROM vie_mart_finance
) subquery2
group by STAT_YM,FACT_NO,CURRENCY,ACC_NO,EXPENSE_NO,EXPENSE_TYPE;
*1 Oracle的lag 與Doris相同。
*2 因為發現筆數不同,所以Doris的 SQL又Group by一次
(1)筆數不同,發現是Doris 在使用lag後,會增加一筆
(2)我拿廠別abc跟2023年4月的資料在Oracle上會驗證,結果跟Doris不同 (Oracle 是正確的)
且Doris上結果很奇怪,當我撈兩筆驗證時,上個月的值跟變成去年同期了,去年同期是會是0,
寫文章過程,想到要撈3筆驗證時,(去年同期、上個月跟當前月),結果發現Doris的Lag指令似乎是根據當前查詢結果動態執行?
但我針對Doris的View進行group by sum LM_DOR_AMT跟LY_DOR_AMT的時候,LM跟LY驗證的加總金額也是錯的。
不知道是否有什麼建議?