1

我得到了这个查询,它占用了我的 elapsed_time 并且工作正常,但后来我意识到我得到了 actual_elapsed 的值错误。actual_elapsed 是我使用 TIMEDIFF() 获取的计时器的运行时间。log_time 是一个日期时间,它是插入/执行操作(播放、暂停)时的日期时间。序列是 int,它告诉我每个用户首​​先发生的事情。status,也是 int,告诉我所做的操作是播放(1)、暂停(2)还是停止(3)。

就像我说的那样,我的问题是通过使用 TIMEDIFF(now(), log_time) 来获得实际经过的正确值。如果我没有暂停动作就好了。

示例数据库条目

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 的持续时间。为此,我必须以某种方式获取休息时间(暂停)的总持续时间,然后得到 elapsed_time 和休息时间的差异。但是我在这方面也遇到了麻烦,因为用户可以多次暂停计时器。

当我设计我的数据库时,这似乎很简单。我该怎么做才能没有这么多的混乱?

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 回答