2016-09-02 9 views
0

私はそれぞれのレコードがstartDateTimefinishDateTimeを持つmysqlテーブルを持っています。私は毎月の合計時間を返すことができるようにしたい。日付範囲内のすべてのデータを検索して月合計を計算する

$dateRange = "BETWEEN '$startDate' AND '$finishDate'"; 

$sql = 
"SELECT 
    TIMESTAMPDIFF(MINUTE, StartDateTime, FinishDateTime) As Duration, 
    StartDateTime As Start, FinishDateTime As Finish 
FROM Entries 
WHERE StartDateTime $dateRange AND FinishDateTime $dateRange"; 

テーブルエントリ

各レコードの長さではなく、各月の合計を返します
| StartDateTime  | FinishDateTime | 
| 2016-08-18 10:00:00 | 2016-08-18 11:00:00 | 
| 2016-08-18 12:00:00 | 2016-08-18 14:00:00 | 
| 2016-08-31 17:00:00 | 2016-09-01 09:00:00 | 

Desired Output 
| Month    | Duration  | 
| Aug     | 10    | 
| Sept    | 9    | 

私の現在のクエリがこれです。必要なデータを取得するためにこのクエリに追加または変更する必要があるのは何ですか?すべてのエントリが同じ月に開始し、終了したことをたぶん

+2

[日付範囲の間で総額に対するSQLクエリ]の可能な重複(http://stackoverflow.com/questions/11616693/sql-query-for-date-range-between-date-range) – hlh3406

+2

dbスキーマおよびおそらくsqlfiddleと同様に、現在の出力を望ましい出力とポストしています。http://sqlfiddle.com/ –

+0

編集してください質問とサンプルデータと希望の結果を提供します。 –

答えて

1

次のことを試してください。

$sql = 
    "SELECT 
     SUM(TIMESTAMPDIFF(HOUR, StartDateTime, FinishDateTime)) As Duration 
    FROM Entries 
    WHERE 
     YEAR(StartDateTime) = YEAR(FinishDateTime) 
     AND MONTH(StartDateTime) = MONTH(FinishDateTime) 
     AND StartDateTime $dateRange 
     AND FinishDateTime $dateRange 
    GROUP BY MONTH(StartDateTime)"; 
+0

あなたは1ヶ月の終わりから次の月の始めに入ったレコードをどのように食べるでしょうか? –

+0

StartDateTimeとFinishDateTimeの月と年が同じかどうかを確認できます。更新された回答を確認します。 –

+0

私は答えの更新を参照してください –

関連する問題