Estimados co-listeros:

Estoy teniendo problemas con una función de agregación y unos cálculos con
ventanas.

El caso  es que estoy intentando hacer unos cálculos en los cuales uso unas
funciones de ventana para obtener una vista materializada (Posgtresql 9.4).
En otros casos (incluso dentro de la consulta que os adjunto), funcionan
perfectamente. No entiendo por qué ahora, en la consulta final no me da el
resultado esperado.

Por si fuera suficiente, ya que la consulta es larga, en primer lugar os
pongo un resumen de la consulta, por si a primera vista algo "chillara".
También os digo que es muy probable que esta no sea la mejor manera de
obtener lo que quiero... pero hasta aquí llego... ideas son bienvenidas:

Resumen:

Create materialized view XXX as(

WITH subconsulta2 as

(

    WITH SUBCONSULTA1 as(Consulta con funcion ventana)

    SELECT (VARIOS CAMPOS DE SUBCONSULTA1 Y OTROS CON CALCULOS, ETC)

)


select CAMPOS DE SUBCONSULTA2 CON FUNCIONES VENTANA


La consulta completa, en la que el cálculo de porc_energia no es correcto
es:

DROP materialized VIEW IF EXISTS param_eval;

CREATE MATERIALIZED VIEW param_eval as(
with previo_param as (
with tm as (
select
camp,
barcod,
lance,
espcod,
ncien,
numero,
((ctalla+0.25)*numero)/sum(numero) over (partition by
camp,barcod,lance,espcod,ncien) as talla

from tallas_final_sinsexo
where numero!=0
group by camp,barcod,lance,espcod,ncien,ctalla,numero)

select
tm.camp,
tm.barcod,
evalcod,
tm.lance,
tm.espcod,
tm.ncien,
sum(tm.numero) as numero,
round(sum(talla),3) as tmedia,
10^((b_par+m_par*log(sum(talla)))/10)::numeric(9,8) as mbsc
from
tm, ts_eval
where
tm.camp=ts_eval.camp and
tm.espcod=ts_eval.espcod

group by
tm.camp,tm.barcod,evalcod,tm.lance,tm.espcod,ts_eval.m_par,ts_eval.b_par,ncien)

select
camp,
barcod,
evalcod,
lance,
espcod,
ncien,
tmedia,
numero,
mbsc,
(numero*mbsc)/sum(mbsc) over (partition by camp,barcod,evalcod,lance) as
porc_energia <---AQUI ESTÁ EL PROBLEMA

from previo_param
group by camp,barcod,evalcod,lance,espcod,ncien,tmedia,numero,mbsc
order by camp,barcod,evalcod,lance,ncien);

Muchísimas gracias por vuestra ayuda, un saludo y feliz vuelta del verano
(o invierno a gente del hemisferio sur)

Jorge Tornero

Responder a