首页 > 解决方案 > 如何在 Oracle SQL 中计算总共 6 个月?

问题描述

我试试这个 SQL 语句:

SELECT
    custodycd,
    SUM(mramt) mramt_6_month,
    txdate,
    CASE    
        WHEN LAG(mramt, 6) OVER (ORDER BY txdate) IS NOT NULL
            THEN SUM(mramt) OVER (ORDER BY txdate ROWS BETWEEN 6 PRECEDING AND 1 PRECEDING)
        ELSE NULL 
    END AS mramt_6_month_1
FROM
    (SELECT
         MAX(mramt) mramt,
         t.afacctno,
         t.custodycd,
         t.txdate 
     FROM
         tbl_mr3007_log t 
     WHERE
         txdate >= '30/nov/2020' 
         AND mramt <> 0 
     GROUP BY
         t.afacctno,
         t.txdate,
         t.custodycd) 
GROUP BY
    custodycd,
    txdate 
ORDER BY
    txdate 

我得到一个错误:

ORA-00979: 不是 GROUP BY 表达式

谢谢你的帮助

标签: sqloracleoracle11g

解决方案


错误消息似乎很清楚。但是,您要做什么并不清楚。

我猜每个custodycd日期都有多行。从第七行开始,您需要前六行的总和。

如果是这样,那么代码如下所示:

(CASE WHEN ROW_NUMBER() OVER (PARTITION BY custodycd ORDER BY txdate) > 6
      THEN SUM(SUM(mramt)) OVER (PARTITION BY custodycd
                                 ORDER BY txdate
                                 ROWS BETWEEN 6 PRECEDING AND 1 PRECEDING
                                )
 END) AS mramt_6_month_1

推荐阅读