我无法弄清楚mysql查询从这个表“ timeEntry ”中提取我想要的数据:
hours creationDate userId clientId projectId taskId
20 2012-02-18 1 1 1 1
40 2012-02-18 1 1 1 1
30 2012-02-21 2 1 1 1
20 2012-02-22 2 1 1 2
30 2012-02-22 2 1 1 2
80 2012-02-23 1 2 2 2
10 2012-02-23 3 2 2 2
15 2012-02-23 1 2 2 3
40 2012-02-23 1 2 4 1
我希望将这种结果作为另一个表,或csv / excel文件或php数组(其中totalHours是userId的小时数之和)给定时间段,比方说(2012年之间) -02-01和2012-02-25):
clientId projectId taskId userId totalHours
1 1 1 1 60
2 30
2 2 50
2 2 2 1 80
3 10
3 1 15
4 1 1 40
我想我必须使用多个组,我尝试了类似的事情:
SELECT clientId, projectId, taskId, userId, sum(hours)
FROM `timeEntry`
WHERE date_creation >= "2012-02-01"
AND date_creation <= "2012-02-25"
GROUP BY clientId, projectId, taskId, userId;
但是没有用......
提前致谢。
答案 0 :(得分:1)
在分组之前需要去的地方。
如果您想在分组前按日期过滤,请使用您拥有的但在分组前移动的where子句。
如果您想要输入或输出整个组,请使用:
...
Group by ...
Having max(date) <= someValue and min(date) >= someValue
答案 1 :(得分:0)
SELECT clientId, projectId, taskId, userId sum(Hours) total_hours
FROM timeEntry
GROUP BY clientID, ProjectID, TaskID, userID;
您可以使用[with Rollup][1]
生成子聚合。如果你想要
答案 2 :(得分:0)
这是一个简单的解决方案。您需要按所有必填字段进行分组
SELECT
t.clientId,
t.projectId,
t.taskId,
t.userId,
SUM(t.hours) AS Total
FROM test AS t
GROUP BY t.creationDate , t.userId , t.clientId , t.projectId , t.taskId
输出:
clientId projectId taskId userId Total
____________________________________________________________
1 1 1 1 60
1 1 1 2 30
1 1 2 2 50
2 2 2 1 80
2 2 3 1 15
2 4 1 1 40
2 2 2 3 10