Reputation: 128
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
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