2017-09-04 19 views
0

playerIDstartDateendDateの列を含むテーブルがあります。これらはタイムスタンプです。複数のタイムスタンプ間の差の合計の計算

playerID startDate    endDate 
1   2017-06-01 12:00:00  2017-06-01 12:05:00 
1   2017-06-01 13:30:00  2017-06-01 13:33:00 
1   2017-08-04 14:57:00  0000-00-00 00:00:00 

私は、特定のプレーヤーのためにstartDateendDate間の秒数の合計を取得するためにクエリを実行しようとしています。 endDate0000-00-00 00:00:00の場合、現在の時刻を使用する必要があります。

select 
    IF(endDate = '0000-00-00 00:00:00', CURRENT_TIMESTAMP, endDate) as finishDate, 
    sum((startDate-finishDate)) as timeTaken 
from table where playerID=1 group by playerID 

これには二つの問題があります。ここでは

は、私がしようとしているものです。私は未知の列エラーを取得すると私はfinishDateを使用することはできないと思う。私はまた、playerID 1

答えて

2

MySQL用のすべての行の合計が秒単位を含め、さまざまな、二つのタイムスタンプの差分を計算することができます便利な機能TIMESTAMPDIFFを持って欲しいです。 CASEの式を使用して、(若干奇数の)ゼロタイムスタンプを現在のタイムスタンプに置き換えることで、各プレーヤを単純に集計し、開始タイムスタンプと終了タイムスタンプの差分を合計することができます。

SELECT 
    playerID, 
    SUM(TIMESTAMPDIFF(SECOND, 
         startDate, 
         CASE WHEN endDate = '0000-00-00 00:00:00' 
          THEN CURRENT_TIMESTAMP ELSE endDate END)) AS timeTaken 
FROM yourTable 
GROUP BY playerID 

社説:私は0000-00-00 00:00:00があなたのテーブルにやっているかわからないが、私はむしろ知られていないエンドタイムスタンプを表現するためにNULLのようなものを使用します。これはまた、コードを少し良くするでしょう。以下の情報を使用して未知の終了タイムスタンプを確認することができます:

COALESCE(endDate, CURRENT_TIMESTAMP) 
+0

本当にありがとう – Chris

関連する問題