2017-02-20 71 views
1

我试图在接下来的30天内为每个用户在某个组中工作的总时间。我对MySQL并不擅长,所以很多这可能是错误的。这是来自JIRA数据库。MySQL Query Multiple Joins复制每行的数据? JIRA数据库

SELECT DISTINCT cu.display_name AS 'Associate', sum(wl.timeworked/3600) AS '30 Days' 
    FROM worklog AS wl, cwd_user AS cu 
    INNER JOIN cwd_membership AS cm 
     ON cu.directory_id=cm.directory_id 
     AND cu.lower_user_name=cm.lower_child_name 
     AND cm.membership_type='GROUP_USER' 
    INNER JOIN worklog 
     ON worklog.AUTHOR = cu.user_name 
    WHERE cm.lower_parent_name='atl_servicedesk_it_agents' AND wl.STARTDATE BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY) 
ORDER BY cu.last_name; 

现在它只是显示的第一用户总和的一切在为大家的工作时间命名。这显然不是我想要的......如果我从时间工作中删除总和,它显示大约一半来自该组的用户,但每个用户的时间工作值为16小时,这是不正确的。只有一个用户在接下来的30天内有任何价值,并且是16个小时,所以出于某种原因它正在复制这些信息。 任何想法?

+0

我试过'GROUP BY cu。 display_name'(或更好的用户主键),并将其放在WHERE子句之后,并删除'DISTINCT',这是否会给出任何不同的结果? –

+0

这样做现在确实显示了所有的名字,367的136个名字。但是,当这些名字实际上只有一行时,它们的名字仍然有随机时间,因为只有一个用户在接下来的30天内记录了时间。我不确定是否我的计算部分是根据任何人的数字计算的总和错误的,而不是名称相同。 – Cole

回答

0

得到它通过取出内连接工作。

SELECT cwd_user.display_name AS 'Associate', sum(worklog.timeworked/3600) AS '30 Days' 
FROM worklog, cwd_user,cwd_membership 
WHERE worklog.AUTHOR = cwd_user.user_name 
and cwd_user.directory_id = cwd_membership.directory_id 
and cwd_user.lower_user_name = cwd_membership.lower_child_name 
and cwd_membership.membership_type = 'GROUP_USER' 
and cwd_membership.lower_parent_name = 'atl_servicedesk_it_agents' 
and worklog.STARTDATE BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 60 DAY) 
GROUP BY cwd_user. display_name 
ORDER BY cwd_user.last_name;