sql - sql中的累计和
问题描述
我有一个问题,我需要为每年的每个月做一个累计和我一直在搜索互联网,解决方案是使用 ORDER (ORDER BY),但它给了我一个错误,附近有一个错误订单,它并没有更多地解释我。根据互联网,语法是正确的,但我不明白为什么它不去。我试图将日期转换为字符串,但它也不允许我这样做。有什么解决办法吗?
这是我的咨询:
SELECT YEAR(FECHA_IMPUT) AÑO,
MONTH(FECHA_IMPUT) MES,
COD_MAQUINA ,
SUM(CANTIDAD_OK) SUMA,
SUM(CANTIDAD_OK) OVER(ORDER BY DATEPART(mm,FECHA_IMPUT)) AS suma
FROM RTMAQUINA
WHERE COD_MAQUINA='LB_TRASVASE'
GROUP BY COD_MAQUINA, MONTH(FECHA_IMPUT),YEAR(FECHA_IMPUT)
ORDER BY YEAR(FECHA_IMPUT), MONTH(FECHA_IMPUT) ASC
错误:订单附近的语法不正确
解决方案
我相信你想要的语法是:
SELECT YEAR(FECHA_IMPUT) AÑO,
MONTH(FECHA_IMPUT) MES,
COD_MAQUINA ,
SUM(CANTIDAD_OK) SUMA,
SUM(SUM(CANTIDAD_OK)) OVER (PARTITION BY YEAR(FECHA_IMPUT) ORDER BY MONTH(FECHA_IMPUT)) AS suma
FROM RTMAQUINA
WHERE COD_MAQUINA = 'LB_TRASVASE'
GROUP BY COD_MAQUINA,
MONTH(FECHA_IMPUT),
YEAR(FECHA_IMPUT)
ORDER BY YEAR(FECHA_IMPUT), MONTH(FECHA_IMPUT) ASC;
注意嵌套SUM()
的 s。这种语法看起来很笨拙,但在将窗口函数与聚合函数一起使用时是正确的。内部SUM()
是聚合。外部SUM()
用于窗口功能。
还要注意 window 子句。首先,它需要引用在GROUP BY
-- 或聚合函数中使用的相同表达式。其次,我认为您想根据问题的表述方式按年份划分。