【发布时间】:2021-08-21 07:14:12
【问题描述】:
我试试这个 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 表达式
感谢您的帮助
【问题讨论】:
-
您能否具体说明您想通过查询实现什么,以及预期的结果?请检查stackoverflow.com/help/how-to-ask 以提出正确的问题。
-
条件
WHERE txdate >= '30/nov/2020'似乎非常很糟糕。如果你真的像这个字符串一样存储日期值,结果将是废话! -
错误原因是
LAG(mramt, 6)的存在。由于mramt列既没有保留在 GROUP BY 列表中,也没有对其应用聚合函数。