2016-12-08 5 views
1

こんにちは私は特定の部門のすべての時間の合計を特定の年に選択できる時間と日付のDBからクエリを実現しようとしています。特定のユーザの特定の月と月の時間の合計を選択してください

表の一例は以下の通りです:

enter image description here

これまでのところ、私が作成していたクエリは以下の通りです:私はこれがやりたい何

SELECT t.clientid, t.date, t.department, t.time, 
         (SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(`time`))) FROM time_management WHERE YEAR(t.date)='$year' AND MONTH(t.date)= 12 GROUP BY t.clientid) as january, 
         (SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(`time`))) FROM time_management WHERE YEAR(t.date)='$year' AND MONTH(t.date)= 2 GROUP BY t.clientid) as february 
         FROM time_management t GROUP by t.clientid 

はすべての選択合計です現在の状態では、すべてのクライアントのすべての時間の合計の結果が得られており、クライアントによるクライアントの結果を取得したいとします。

現在の結果は次のとおりです。

enter image description here

だから私は探していますと、時間の合計がclientidごとにグループ化された結果を取得し、2つの結果だけではなく、1を取得する方法です。両方のクライアントIDの合計。それらのそれぞれについて独立して合計されるか?

非常に助かります。ありがとうございました!

答えて

0

あなたは、サブクエリなしていることを行うことができるはず -

SELECT `date`, `department`, SUM(`time`) 
    FROM `time_management` 
    WHERE YEAR(`date`)='$year' AND MONTH(`date`)= 12 
    GROUP BY `client_id` 

私はあなたが数秒で、データベース内のあなたの時間を保存をお勧めします - それがフォーマットされていますとき、それは時間と分として表示する必要がある唯一の時間ですクライアントの画面に表示されます。文字列として格納する場合は、変換するすべてのものを戻す必要があります。

もっと見ると、年と月を別々の列として保存することもお勧めします。パターン:201612、おそらく、そういうもの。それはあなたのwhere節もクリーンアップします。

+0

これは非常に良い解決策のように見えますが、私がサブクエリを使用しているのは、1月、2月など2か月以上をダンプする必要がある場合に備えて、月として定義することです。 –

関連する問題