-
Суть : Выдать среднее по месяцам продож товара (GRUP, NNUM) за предыдущие месяца (не включая текущий). Если месяц до марта включительно, то учитывать предыдущий год и месяца текущего, кроме текущего месяца.
Писал по так
IF (MNTH < 3) THEN BEGIN SELECT AVG(SELECT EXTRACT(MONTH FROM SALES.DATE_OPER),SUM(SALES.KOLOUT) FROM SALES WHERE SALES.GRUP = :GRUP AND SALES.NNUM = :NNUM AND EXTRACT(YEAR FROM SALES.DATE_OPER) = :YR - 1 AND GROUP BY 1) FROM SALES INTO :KOL; SELECT AVG(SELECT EXTRACT(MONTH FROM SALES.DATE_OPER),SUM(SALES.KOLOUT) FROM SALES WHERE SALES.GRUP = :GRUP AND SALES.NNUM = :NNUM AND EXTRACT(YEAR FROM SALES.DATE_OPER) = :YR AND GROUP BY 1) FROM SALES INTO :KOL_OUT; IF (KOL IS NULL) THEN KOL = 0; KOL_OUT = KOL_OUT + KOL; END ELSE
и так :
BEGIN SELECT EXTRACT(MONTH FROM SALES.DATE_OPER), AVG(SALES.KOLOUT) FROM SALES WHERE SALES.GRUP = :GRUP AND SALES.NNUM = :NNUM AND EXTRACT(YEAR FROM SALES.DATE_OPER) = :YR AND EXTRACT(MONTH FROM SALES.DATE_OPER) < :MNTH GROUP BY 1 INTO :M, :KOL_OUT; END SUSPEND; END
Первый if ругается на селект в AVG() else тупо дает количество проданного за месяц (тестировал на товаре, продажа которого была 1 раз за год) Селект в AVG() - эксперимент
-
avg имеет ОДИН параметр и дает среднее ПО ЗАПИСЯМ, а не по каким-то там месяцам
-
Правильный$Вася (04.09.08 12:34) [1] Спасибо за четкий ответ. Очень помог. Теперь помоги, раз так хорошо все знаешь, как быть в той ситуации, которую я описал выше. Как получить среднемесячное количество проданного товара за год.
-
> Как получить среднемесячное количество проданного товара > за год.
в [0] у тебя не год, а то год, то год с плюсом и что тебе нужно получить, если в какие-то месяцы подаж не было
-
Или, другими словами, AVG(), в этом случае, бесполезен?
-
Правильный$Вася (04.09.08 12:43) [3] Пример: за год была одна продажа 25 штук товара. Надо получить среднемесячное за год, а именно 25/12 с помощью AVG. Меня интересует - это возможно или надо тупо считать?
-
это не среднемесячное это count за период / число месяцев
-
Правильный$Вася (04.09.08 12:48) [6] Мне всегда казалось, что average в математике это среднее(ожидаемое) значение. Видимо я ошибся.
-
ты так и не сказал, что ты хочешь получить для месяца с нулевыми продажами судя по твоим попыткам запроса, он игнорируется, но судя по объяснению - должен включаться
-
AVG(VALUE), а у тебя AVG(VALUE1, VALUE) Буквально так > AVG(SELECT EXTRACT(MONTH FROM SALES.DATE_OPER),SUM(SALES. > KOLOUT) FROM SALES
-
Виталий Панасенко(дом) (04.09.08 13:00) [9] Понял, благодарю.
|