Mysql SQL多分组依据
我无法通过mysql查询从表“timeEntry”中提取所需的数据: 我希望在给定的时间段,比如说(2012-02-01和2012-02-25之间),将这种结果作为另一个表,或csv/excel文件或php数组(其中totalHours是用户ID的小时数总和): 我想我必须使用多个分组方式,我尝试了以下方法: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
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