我有这个查询
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;
它给了我这个结果:
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
但应该是这样的:
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
我做错了什么?
答案 0 :(得分:1)
您需要使用他们的日期加入这两个子查询,而不仅仅是部门ID,因此您不会获得所有日期的交叉产品。因此,将ON
子句更改为
ON t1.departamento_id = t2.departamento_id AND t1.ano = t2.ano AND t1.mes = t2.mes