2

このテーブル「 timeEntry」 から必要なデータを抽出するためのmysqlクエリを理解できません。

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

複数のgroupbyを使用する必要があると思います。次のようなものを試しました。

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 の前に移動します。

代わりにグループ全体をフィルタリングしたい場合は、次のように使用します。

...
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 に答える