edbird88
edbird88

Reputation: 128

Not showing the results i need

I have this query

SELECT t1.ano, 
t1.mes,
t1.departamento_id, 
t1.departamento_nome, 
tempo_extra, 
tempo_ativo, 
tempo_extra/tempo_ativo AS volume_extra 
FROM ( 
SELECT 
YEAR(`data`) AS ano, 
MONTH(`data`) AS mes, 
departamentos.id AS departamento_id, 
departamentos.nome AS departamento_nome, 
SUM(tempo) AS tempo_extra 
FROM rh.aprovacoes LEFT JOIN rh.colaboradores ON colaboradores.id=aprovacoes.colaborador_id 
LEFT JOIN rh.departamentos ON departamentos.id=colaboradores.departamento_id
WHERE (tipo = 'BH' OR tipo = 'HE') AND (YEAR(aprovacoes.`data`)=2016 AND 
MONTH(aprovacoes.`data`)=2 AND colaboradores.departamento_id=2) OR 
(YEAR(aprovacoes.`data`)=2016 AND MONTH(aprovacoes.`data`)=1 AND colaboradores.departamento_id=2) 
GROUP BY colaboradores.departamento_id, MONTH(`data`) 
ORDER BY departamentos.nome ASC) AS t1 
LEFT JOIN ( 
SELECT YEAR(`data`) AS ano, 
 MONTH(`data`) AS mes, 
departamentos.id AS departamento_id, 
departamentos.nome AS departamento_nome, 
SUM(ativo) AS tempo_ativo 
FROM rh.processamento 
LEFT JOIN rh.colaboradores ON colaboradores.id=processamento.colaborador_id 
LEFT JOIN rh.departamentos ON departamentos.id=colaboradores.departamento_id 
 WHERE 1=1 AND (YEAR(processamento.`data`)=2016 AND MONTH(processamento.`data`)=2 AND colaboradores.departamento_id=2) OR (YEAR(processamento.`data`)=2016 AND MONTH(processamento.`data`)=1 AND colaboradores.departamento_id=2) 
GROUP BY colaboradores.departamento_id, MONTH(`data`)) AS t2 ON t1.departamento_id = t2.departamento_id 
ORDER BY ano ASC, mes ASC;

It's giving me this results:

ano mes departamento_id departamento_nome tempo_extra tempo_ativo volume_extra
2016 1     2            Administrativa    -73009      5562638     -0.0131
2016 1     2            Administrativa    -73009      6463516     -0.0113
2016 2     2            Administrativa    -198599     5562638     -0.0357
2016 2     2            Administrativa    -198599     6463516     -0.0307

But should be something like this:

ano mes departamento_id departamento_nome tempo_extra tempo_ativo volume_extra
2016 1     2            Administrativa    -73009      5562638     -0.0131
2016 2     2            Administrativa    -198599     6463516     -0.0307

What i'm doing wrong?

Upvotes: 0

Views: 35

Answers (1)

Barmar
Barmar

Reputation: 780843

You need to join the two subqueries using their dates, not just the department IDs, so you don't get a cross-product of all the dates. So change the ON clause to

ON t1.departamento_id = t2.departamento_id AND t1.ano = t2.ano AND t1.mes = t2.mes

Upvotes: 1

Related Questions