WITH produtos AS ( SELECT TO_CHAR(d.data_emissao, 'YYYY-MM') AS periodo, d.data -> 'nfe' -> 'infNFe' ->> 'ie' AS inscricaoEstadual, item.produto -> 'prod' ->> 'cprod' AS codigo, item.produto -> 'prod' ->> 'xprod' AS nome, item.produto -> 'prod' ->> 'ncm' AS codigoNcm, item.produto -> 'prod' ->> 'ucom' AS descricaoUnidadeMedida, SUM(CAST(item.produto -> 'prod' ->> 'qcom' AS NUMERIC)) AS quantidade, SUM(CAST(item.produto -> 'prod' ->> 'vprod' AS NUMERIC)) AS valor, row_number() OVER ( PARTITION BY TO_CHAR(d.data_emissao, 'YYYY-MM') ORDER BY SUM(CAST(item.produto -> 'prod' ->> 'vprod' AS NUMERIC)) DESC ) AS rank FROM document d CROSS JOIN LATERAL jsonb_array_elements( CASE WHEN d.type IN ('NFE_4_0','NFE_3_1') THEN d.data -> 'nfe' -> 'infNFe' -> 'det' ELSE d.data -> 'infCFe' -> 'det' END ) WITH ORDINALITY AS item(produto) WHERE d.cnpj_issuer = ? AND d.key IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) AND d.type IN ('NFE_4_0','NFE_3_1','CFE_0_7','CFE_0_8') AND d.data_emissao BETWEEN ? AND ? AND item.produto -> 'prod' ->> 'cfop' IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) GROUP BY TO_CHAR(d.data_emissao, 'YYYY-MM'), d.data -> 'nfe' -> 'infNFe' ->> 'ie', item.produto -> 'prod' ->> 'cprod', item.produto -> 'prod' ->> 'xprod', item.produto -> 'prod' ->> 'ncm', item.produto -> 'prod' ->> 'ucom' ) SELECT periodo, inscricaoEstadual, codigo, nome, codigoNcm, descricaoUnidadeMedida, SUM(quantidade) AS quantidade, SUM(valor) AS valor FROM produtos WHERE rank <= ? GROUP BY periodo, codigo, nome, codigoNcm, descricaoUnidadeMedida, inscricaoEstadual |
10
|
13
|
3
|
|
0.00
|