1

経過時間を取り、正常に機能するこのクエリを取得しましたが、actual_elapsedの値が間違っていることに気付きました。actual_elapsedは、TIMEDIFF()を使用して取得したタイマーの実行時間です。log_timeは日時であり、アクション(再生、一時停止)が挿入/作成された日時です。シーケンスはintであり、各ユーザーに対して最初に発生したものを示します。statusもintで、実行されたアクションがplay(1)、pause(2)、またはstop(3)のいずれであるかを示します。

私が言ったように、私の問題はTIMEDIFF(now()、log_time)を使用してactual_elapsedの正しい値を取得することです。一時停止アクションがなければ、問題はなかったでしょう。

DBエントリの例

log_time               sequence     status

2012-09-27 15:31:02     1            1                
2012-09-27 15:31:04     2            2               **2  +**
2012-09-27 15:40:08     3            1
2012-09-27 15:40:45     4            2               **39 +**
2012-09-27 15:40:47     5            1
2012-09-27 15:40:57     6            3               **10 =**
                                                     **49**

私のクエリでは、09分57秒が表示されますが、49秒しか取得できません。

私のサンプルクエリ。

 (" select sequence_num, elapsed_time, status, TIMEDIFF(now(), log_time) as actual_elapsed from tbl");

actual_elapsedの期間を取得しようとしています。そのためには、どういうわけか休憩時間の合計時間を取り(一時停止)、経過時間と休憩時間の差を取得する必要があります。しかし、ユーザーがタイマーを複数回一時停止できるため、その部分でも問題が発生しています。

DBを設計したとき、これは十分に単純に思えました。どうすればそれほど混乱せずにこれを行うことができますか?

4

1 に答える 1

0

SELECT iStop-iStart FROM (SELECT SUM(log_time) AS iStop FROM tbl WHERE status IN (2,3)) a JOIN (SELECT SUM(log_time) AS iStart FROM tbl WHERE status=1) b;

上記のクエリは、一時停止または停止が最後のレコードの場合にのみ機能します

于 2012-09-27T09:31:13.103 に答える