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 |
6
|
8
|
1
|
|
0.00
|