Mysql SQL多分组依据

Mysql SQL多分组依据,mysql,sql,Mysql,Sql,我无法通过mysql查询从表“timeEntry”中提取所需的数据: 我希望在给定的时间段,比如说(2012-02-01和2012-02-25之间),将这种结果作为另一个表,或csv/excel文件或php数组(其中totalHours是用户ID的小时数总和): 我想我必须使用多个分组方式,我尝试了以下方法: SELECT clientId, projectId, taskId, userId, sum(hours) FROM `timeEntry` WHERE date_creation &g

我无法通过mysql查询从表“timeEntry”中提取所需的数据:

我希望在给定的时间段,比如说(2012-02-01和2012-02-25之间),将这种结果作为另一个表,或csv/excel文件或php数组(其中totalHours是用户ID的小时数总和):

我想我必须使用多个分组方式,我尝试了以下方法:

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;
选择clientId、projectId、taskId、userId、sum(小时)
从`时间输入`
其中创建日期>=“2012-02-01”

和日期创建在分组之前需要去哪里

如果要在分组前按日期筛选,请使用已移动到group by之前的where子句

如果您想将整个组过滤入或过滤出,请使用:

...
Group by ...
Having max(date) <= someValue and min(date) >= someValue
。。。
分组方式。。。
具有最大值(日期)=某个值

您可以使用
[with Rollup][1]
生成子聚合。如果您需要,这里有一个简单的解决方案。您需要按所有必需字段分组

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

你能提供架构吗?你真的不想在子行中有数据吗?例如,对于您的第二行和第三行,如果
clientId
的值为
1
,是否可以?@Abe Miessler:是的,完全可以。
SELECT clientId, projectId, taskId, userId    sum(Hours) total_hours 
FROM timeEntry 
GROUP BY clientID, ProjectID, TaskID, userID;
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