Накопленные суммы в sql - PullRequest
       12

Накопленные суммы в sql

0 голосов
/ 08 апреля 2019

У меня есть проблема, мне нужно составлять суммарную сумму за каждый месяц каждого года, и я искал в Интернете, и решение состоит в том, чтобы использовать 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

ОШИБКА: неверный синтаксис рядом с заказом

Результат запроса

ОШИБКА: неверный синтаксис рядом с порядком

1 Ответ

0 голосов
/ 08 апреля 2019

Я полагаю, что вам нужен следующий синтаксис:

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() предназначен для оконной функции.

Также обратите внимание на предложение окна. Во-первых, он должен ссылаться на те же выражения, которые используются в GROUP BY - или функциях агрегирования. Во-вторых, я думаю, что вы хотите разделить по годам в зависимости от того, как сформулирован ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...