EDIT Atualizei minha pergunta com uma amostra do SQL Fiddle http://sqlfiddle.com/#!15/8d88b/1
Atualmente, estou fazendo um relatório a partir de registros de um banco de dados, mas não sei como minha consulta deve ficar, antes de mais nada, tenho 2 tabelas. Formulários de Candidatura e uma tabela de Horas de Login de cada utilizador
forms
->id
->agent_id
->SomeInfo
->created_at
loginhours
->id
->user_id
->loginhours (decimal)
->created_at
E eu tenho relatório com as seguintes colunas
UserID, TotalLoginHours, TotalApplication, Application Per Hour (aph), Revenue Per Hour (rph)
Então agora eu tenho essa consulta
SELECT a.agent_id, SUM(b.loginhours) as TotalLoginHours, COUNT(a.id) as TotalApplication, SUM(b.loginhours) / COUNT(a.id) as ApplicationPerHour, (SUM(b.loginhours) / COUNT(a.id)) * 1.75 as RPH
FROM forms a
INNER JOIN loginhours b ON a.agent_id = b.user_id WHERE a.created_at = '2015-07-17'
GROUP BY a.agent_id
Note que user_id
e agent_id
é o mesmo.
Quero obter o resultado com base na data selecionada, exemplo 2015-07-17
, obtive resultados, mas meu problema é loginhours
que está sendo SUM
baseado no número de aplicativos de cada usuário. Então, por exemplo user1
, tem 2 registros na forms
tabela e o loginhours
from dele 2015-07-17
está 2
no meu resultado, o que está loginhours
errado 4
, acho que está na minha GROUP BY
declaração. Você pode me ajudar a consultar isso corretamente? Obrigado
Para evitar o efeito de multiplicação que você está experimentando, você pode fazer a agregação primeiro e depois juntar:
Não tenho certeza se acertei todos os detalhes, mas deve dar uma dica de uma técnica que pode ser usada. Modifiquei seu violino em: http://sqlfiddle.com/#!15/8d88b/9
Consulta por agente por dia com nome de usuário.
Reenquadre a consulta de acordo com sua tabela de usuário.