Consulta com totalização usando view, sum e group by

Olá, Pessoal.

Sou novo no Scriptcase e estou tentando criar uma consulta utlizando uma view já existente no BD. A view me dá os dados totalizados por dia, porém preciso desses totais relativos a um período (data inicial e final) que é especificado pelo usuário. Consigo fazer a consulta e mostrar os dados normalmente, mas não consigo fazer os totalizadores (Totalização e Resumo) funcionar. O problema é que o SC tenta executar uma outra query para buscar os totais e ele cria esta a partir da minha consulta principal. Como ela tem funções de agrupamento (sum e avg) e, obviamente, a cláusula “Group By”, ele se perde e cria uma query inválida. Segue abaixo a minha query principal e a que ele cria.

SELECT id_projeto, projeto, id_provedor, provedor, numero, dt_ini_projeto, dt_fim_projeto,
sum(qtde_chamadas) AS qtde_chamadas,
round(sum(segundos_cursados) / 60.0, 1) AS minutos_cursados,
round((sum(segundos_cursados) / 60.0) / sum(qtde_chamadas), 2) AS tempo_medio
FROM vwRelResultadoProjeto
WHERE dt_cdr >= ‘[dt_inicial_filtro]’ AND dt_cdr <= ‘[dt_final_filtro]’
GROUP BY id_projeto, projeto, id_provedor, provedor, numero, dt_ini_projeto, dt_fim_projeto
ORDER BY provedor, projeto, numero

select count(*), sum(qtde_chamadas) as S_qtde_chamadas, sum(round(sum(segundos_cursados) / 60.0,1)) as sum_minutos_cursados from vwRelResultadoProjeto where dt_cdr >= ‘2016-09-01’ AND dt_cdr <= ‘2016-09-30’ group by id_projeto, projeto, id_provedor, provedor, numero, dt_ini_projeto, dt_fim_projeto

O MySQL informa que a segunda query está inválida. Sim, faltam os campos da cláusula Group By na lista de campos ou, no meu caso, remover a cláusula Group By.

Alguém consegue me ajudar?

Obrigado.

Olá,

Experimente criar uma view e tente novamente.

Olá, Kleyber.

Mas eu já uso uma view. Ela simplifica muito a query, escondendo os joins e demais clausulas. Contudo ainda assim preciso de filtros que não são fixos, como a data.

abs

Passa o código que usou para criar a VIEW… tem que corrigir ele.

Oi, Jailton.

Te garanto que a view está correta, mas em todo caso, segue abaixo. Ela me dá os dados já consolidados por dia. Só que na consulta eu preciso desta consolidação por um período que o usuário irá escolher.

CREATE VIEW vwRelResultadoProjeto AS
SELECT
x.id_projeto AS id_projeto,
p.nome AS projeto,
x.id_provedor AS id_provedor,
r.nome AS provedor,
x.numero AS numero,
CAST(c.dt_cdr AS DATE) AS dt_cdr,
CAST(x.dt_ini_vigencia AS DATE) AS dt_ini_projeto,
CAST(x.dt_fim_vigencia AS DATE) AS dt_fim_projeto,
COUNT(c.id_cdr) AS qtde_chamadas,
SUM(c.duracao) AS segundos_cursados,
SUM(c.duracao) / 60.0 AS minutos_cursados,
(SUM(c.duracao) / 60.0) / SUM(c.duracao) AS tempo_medio
FROM
num_proj_prov_integ x
JOIN projetos p ON (x.id_projeto = p.id_projeto)
JOIN provedores r ON (x.id_provedor = r.id_provedor)
JOIN cdrs c ON (c.num_destino = x.numero
AND c.dt_cdr >= x.dt_ini_vigencia
AND (CAST(c.dt_cdr AS DATE) <= x.dt_fim_vigencia
OR ISNULL(x.dt_fim_vigencia)))
WHERE c.flg_status <> ‘9’
GROUP BY x.id_projeto , x.id_provedor , p.nome , r.nome , x.numero , CAST(c.dt_cdr AS DATE) , CAST(x.dt_ini_vigencia AS DATE) , CAST(x.dt_fim_vigencia AS DATE)

Colando esta Query assim na grid do SC funciona? roda? sem o WHERE?
SELECT id_projeto, projeto, id_provedor, provedor, numero, dt_ini_projeto, dt_fim_projeto,
sum(qtde_chamadas) AS qtde_chamadas,
round(sum(segundos_cursados) / 60.0, 1) AS minutos_cursados,
round((sum(segundos_cursados) / 60.0) / sum(qtde_chamadas), 2) AS tempo_medio
FROM vwRelResultadoProjeto
GROUP BY id_projeto, projeto, id_provedor, provedor, numero, dt_ini_projeto, dt_fim_projeto
ORDER BY provedor, projeto, numero

Testa a mesma Query sem o Where direto no MySQL.

Se rodar pode ser as datas:
‘[dt_inicial_filtro]’ = tem que marcar elas como formato interno AAAA-MM-DD no campo do SC.
‘[dt_final_filtro]’ = tem que marcar elas como formato interno AAAA-MM-DD no campo do SC.

Oi, Jailton.

Fiz o teste e ela roda no MySQL sem problemas. Os globais estão configuradas com o formato que vc mencionou (AAAA-MM-DD), senão dá erro de comparação.

abs

Esta usando a conexão no Scriptcase = MySQL PDO?

Teste com a conexão PDO.

Oi, Jailton.

Estou usando este tipo de conexão sim.

att