Doris 2.1.5 版,在執行lag SQL後,發現除了數值是錯的,而且資料筆數還會增加

Viewed 59

在嘗試從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後,會增加一筆
image.png

(2)我拿廠別abc跟2023年4月的資料在Oracle上會驗證,結果跟Doris不同 (Oracle 是正確的)
image.png

且Doris上結果很奇怪,當我撈兩筆驗證時,上個月的值跟變成去年同期了,去年同期是會是0,

image.png

寫文章過程,想到要撈3筆驗證時,(去年同期、上個月跟當前月),結果發現Doris的Lag指令似乎是根據當前查詢結果動態執行?
image.png

但我針對Doris的View進行group by sum LM_DOR_AMT跟LY_DOR_AMT的時候,LM跟LY驗證的加總金額也是錯的。

不知道是否有什麼建議?

1 Answers

这边方便提供表结构及对应的复现步骤吗?

问题长时间未回复先close了,如果有问题可以加我微信(hhj_0530)或者评论更新。