2009-08-25 1 views
8

私はこの形式で日付時刻値を含むテーブルを有する:MySQL - どのようにSUM時間ですか?

START

2009年1月13日7時00分○○秒AM

END

1/13/2008 2:57:00 PM

私は 'str to date'関数を使用して、これらを日付/時刻形式に変換します。

どうやってそれらの違いを計算しますか? それから、総時間で表示するように合計します(つまり、週の合計時間は40:53です)。

私はtimediff関数を試していましたが、結果は合計されません。

答えて

4

UNIX_TIMESTAMPSEC_TO_TIMEを参照してください。

あなたは、時間を取得するために(ミリ秒単位になります)、その値を使用して、タイムスタンプの違いをまとめるう:

SELECT SEC_TO_TIME(time_milis/1000) 
FROM (
    SELECT SUM(UNIX_TIMESTAMP(date1) - UNIX_TIMESTAMP(date2)) as time_milis 
    FROM table 
) 
+0

ありがとう - 私は日時文字列を秒に変換しました - 差を計算した後、秒を時分に戻します。 –

+0

訂正 - time_to_sec関数は日付部分には適用されません - 時間部分のみに適用されます - したがって2009-08-25 01:06:00 - 2009-08-24 15:35:00負の値になります。 timediff関数を使用する必要があります。 –

6

チェックアウトあなたはまた、試みることができるMySQL DateDiff Function

SELECT SUM(DATEDIFF(endtime, starttime)) 
FROM somerecordstable 
WHERE starttime > '[some date]' AND endtime <= '[some date]' 

SELECT SUM(TIMEDIFF(endtime, starttime)) 
FROM somerecordstable 
WHERE starttime > '[some date]' AND endtime <= '[some date]' 

は、私は2番目のものをテストしていませんが、私は最初のものは動作するはずです知っています。

+0

は、これは正しい考えですが、日中にあなたに答えを与えるだろう。 –

+0

ありがとうございます - 特定の週の従業員の合計勤務時間を検索する必要があるため、時間がかかる必要があります。 –

+0

2番目の例は私にあなたに正しい答えを与えるべきである – Jason

1
SELECT some_grouping_column, SUM(TIMEDIFF(datecol1,datecol2)) as tot_time 
FROM my_table 
GROUP BY some_grouping_column; 
+0

結果は分で返されますか? –

+0

それはhh:mm:ssを返す http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_timediff – dnagirl

40

私はそれが動作...あなたはこのコードを使用する必要があると思います:)

SELECT 
    SEC_TO_TIME(SUM(TIME_TO_SEC(`time`))) AS total_time 
FROM time_table; 
+0

私はこれをMySQLで行いましたが、LIMITは別の方法では動作しないので、サブクエリを使ってtmpテーブルを作成しなければなりませんでした。 'select sec_to_time(sum(secs))from(select TIME_TO_SEC(TIMEDIFF(end_time、start_time) id desc limitによって予約注文から10)t; '奇妙です。 – Rudie

関連する問題