[RESOLVIDO] Filtro Refinado com Consulta com Group by

Olá, boa tarde.

Estou com uma situação que não consigo entender o motivo.

Simplesmente ao fazer um filtro, seja ele refinado ou quicksearch, aparece isso na tela.

image

O que poderia ser isso? tentei contornar de várias maneiras, é bem aleatório a maneira que aparece.

Esse seria o sql que estou utilizando

SELECT
    CASE
        WHEN max(cer.data_vencimento) < CURDATE() THEN 'Vencido'
        ELSE 'Válido'
    END as situacao,
    max(cer.id) as id,
    ee.id as id_empresa,
    epg.nome as nome_grupo,
    ee.nome as nome_empresa,
    ee.cnpj,
    ct.nome_certidao AS nome_certidao_ct,
    CONCAT("(", cm.nome, " ", ce.sigla, ")") AS locale,
    ce.sigla,
    max(cer.data_vencimento) as data_vencimento,
    max(cer.atualizado_em) as atualizado_em,
    max(cer.deletado_em) as deletado_em,
    max(cer.nome_arquivo) as nome_arquivo,
    max(cer.arquivo) as arquivo,
    max(cer.criado_em) as criado_em,
    max(cer.observacao) as observacao,
    max(cpr.dias) as dias,
    max(cer.tipo) as tipo,
    max(cer.meio_captura_automatica) as meio_captura_automatica,
    (max(cer.data_vencimento) - INTERVAL COALESCE(max(cpr.dias), 0) DAY) AS nova_data_prazo_renovacao,
    max(cer.responsavel) as responsavel,
    max(cer.acao) as acao
FROM
    cer_certidoes cer
INNER JOIN emp_empresas ee ON
    ee.id = cer.id_empresa
LEFT JOIN emp_grupos epg ON
    epg.id = ee.grupo 
INNER JOIN sec_users su ON
    su.login = '[usr_login]'
LEFT JOIN cer_prazo_renovacao cpr ON
    cpr.id = cer.id_prazorenovacao
LEFT JOIN cfg_tipocertidao ct ON
    ct.id = cer.tipo
LEFT JOIN cfg_municipios cm ON
    cm.id = cpr.id_municipio
LEFT JOIN cfg_estados ce ON
    ce.id = cpr.id_estado
WHERE
    (
        cer.deletado_em IS NULL
        AND (
            epg.id IS NOT NULL
            AND (
                FIND_IN_SET(epg.id, su.grupos) > 0
                OR FIND_IN_SET(CONCAT(';', epg.id), su.grupos) > 0
                OR FIND_IN_SET(CONCAT(epg.id, ';'), su.grupos) > 0
                OR FIND_IN_SET(epg.id, REPLACE(su.grupos, ';', ',')) > 0
            )
        )
    )
    OR cpr.id = 0 
GROUP BY
    ee.id,
    epg.id,
    su.grupos,
    cm.nome,
    ce.sigla,
    tipo

Aí por algum motivo o scriptcase na hora dos filtros, está puxando o max das colunas para dentro do where e conflitando.

Você tem cláusula where no seu SQL principal, ao criar os filtros corrompe o SQL causando esse erro estranho.
Adicione a cláusula where dinamicamente com a macro sc_select_where(add)

1 Curtida

Entendi @InfinitusWeb agradeço pela exemplificação.

Contornei repetindo a coluna sem o max(), que era o que estava conflitando dentro do SQL, no where ele estava incluindo as colunas com max e dando erro de sintaxe.

Mas deu certo por aqui, obrigado!

1 Curtida