2

我无法弄清楚 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 年 2 月 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;

但是没有用...

提前致谢。

4

3 回答 3

1

在Group by之前需要去哪里。

如果您想在分组之前按日期过滤,请使用您拥有但在分组依据之前移动的 where 子句。

如果您想过滤整个组或过滤掉整个组,请使用有:

...
Group by ...
Having max(date) <= someValue and min(date) >= someValue
于 2013-02-18T20:23:10.643 回答
0
SELECT clientId, projectId, taskId, userId    sum(Hours) total_hours 
FROM timeEntry 
GROUP BY clientID, ProjectID, TaskID, userID;

您可以使用它[with Rollup][1]来生成子聚合。如果你想

于 2013-02-18T20:26:52.970 回答
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
于 2013-02-18T20:34:22.327 回答