Накопительный итог посчитанный оконной функцией не верен. Как исправить
Есть скрипт, в котором мне необходимо подсчитать корректно накопительный итог по полю month_spis. Но в результате отработки скрипта, накопительный итог к концу года значительно ниже корректного, при этом оконная функция, высчитывающая агрегацию по месяцам выдает верный результат. Что еще нужно учесть? Помогите пожалуйста скорректировать скрипт.
WITH monthly AS (
SELECT
a.month::int AS month,
NULLIF(c.org_id, '0') AS org_id,
NULLIF(a.function_direction, '') AS function_direction,
NULLIF(a.subcategory_product, '') AS subcategory_product,
NULLIF(a.klass_fot, '') AS klass_fot,
NULLIF(COALESCE(t2.type_unit, t.type_unit), '-') AS type_unit,
SUM(a.avg_spis_people_all::numeric) AS month_spis
FROM hr."1C".avg_people_fzp AS a
JOIN hr."Book_UFPS" AS c
ON btrim(a.organization) = c.organization
LEFT JOIN (
SELECT DISTINCT
COALESCE(index_department::text, '0') AS index_unit,
first_value(substr(tip_ops, 1, position(' ' in tip_ops)-1))
OVER (PARTITION BY index_department::text ORDER BY tip_ops) AS type_unit
FROM poligon."Book_Class_OPS"
) AS t2
ON COALESCE(a.index_unit::text, '0') = t2.index_unit
LEFT JOIN public.or_type_unit AS t
ON COALESCE(a.index_unit::text, '0') = t.index_unit
WHERE a.year = 2024
AND a.date_replica BETWEEN '2024-01-01' AND '2024-12-01'
GROUP BY 1,2,3,4,5,6
)
SELECT
month,
org_id,
function_direction,
subcategory_product,
klass_fot,
type_unit,
SUM(month_spis) OVER (
PARTITION BY org_id, function_direction, subcategory_product, klass_fot, type_unit, month
ORDER BY month
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS avg_spis_month,
SUM(month_spis) OVER (
PARTITION BY org_id, function_direction, subcategory_product, klass_fot, type_unit
ORDER BY month
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS cumulative_avg_spis
FROM monthly
ORDER BY month;
Вот сводная таблица, полученная в результате отработки скрипта
Ответы (1 шт):
Автор решения: Solt
→ Ссылка
Если окно на все записи месяца, кажется можно было писать в первом только PARTITION BY month и без ORDER, а во втором только ORDER BY month
