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