MySQL添加时间戳值

MySQL添加时间戳值,mysql,timestamp,Mysql,Timestamp,我有一个MySQL格式的表:(time=插入时的时间戳) 我需要做一个选择,像这样添加时间差 (41-31)+(46-45)(我使用id而不是实际的时间值来更好地理解我需要做什么) 类似于选择(这样做的东西)作为TotalTimePent,其中tid='1'如果您坚持使用这种表布局(我真的希望您改变主意,这真的很可怕),您可以使用存储过程中的游标来完成 伪代码如下所示: CREATE PROCEDURE gettotaltime() BEGIN DECLARE total, curr, pr

我有一个MySQL格式的表:(time=插入时的时间戳)

我需要做一个选择,像这样添加时间差

(41-31)+(46-45)
(我使用id而不是实际的
时间值来更好地理解我需要做什么)


类似于
选择(这样做的东西)作为TotalTimePent,其中tid='1'

如果您坚持使用这种表布局(我真的希望您改变主意,这真的很可怕),您可以使用存储过程中的游标来完成

伪代码如下所示:

CREATE PROCEDURE gettotaltime()
BEGIN
  DECLARE total, curr, prev DATETIME;
  DECLARE odd INT DEFAULT 1;
  DECLARE done INT DEFAULT 0;

  DECLARE c CURSOR FOR SELECT time FROM tbl;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
  OPEN c;

  read_loop: LOOP
    FETCH c INTO curr;

    IF odd=0 THEN 
      SET total=dateadd(total,datediff(curr,prev));   -- or something similar, I forget
    END IF;

    SET prev=curr;
    SET odd=1-odd;

    IF done THEN
      LEAVE read_loop;
    END IF;
  END LOOP;

  CLOSE c;

  SELECT total;
END;

你有关于哪种时间戳是哪种类型的信息吗?有没有假设tid/uid组合最早的时间戳是开始,然后它们交替出现?在给定“开始”事件id的情况下获取“停止”事件是可行的,它会忽略一半的事件作为“开始”事件,这很棘手。你为什么要用这种愚蠢的数据库设计?如果不使用两个不同的表,或者最好是一行两个时间值,则至少应存储事件类型,即开始和停止。如果计数(*)结果不是偶数,则其工作原理与开始/停止/开始/停止类似。选择将不会触发谢谢。我没有选择,这是一个已经编写好的应用程序,如果我修改表结构,我必须更改很多东西。如果你继续这样写报告,你将浪费比切换布局更多的时间。这整件事可以从tbl中写成
selectsum(datediff(end-start))
CREATE PROCEDURE gettotaltime()
BEGIN
  DECLARE total, curr, prev DATETIME;
  DECLARE odd INT DEFAULT 1;
  DECLARE done INT DEFAULT 0;

  DECLARE c CURSOR FOR SELECT time FROM tbl;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
  OPEN c;

  read_loop: LOOP
    FETCH c INTO curr;

    IF odd=0 THEN 
      SET total=dateadd(total,datediff(curr,prev));   -- or something similar, I forget
    END IF;

    SET prev=curr;
    SET odd=1-odd;

    IF done THEN
      LEAVE read_loop;
    END IF;
  END LOOP;

  CLOSE c;

  SELECT total;
END;