因此,基本上,我有一个表,其中用户的状态更改了被记录(用户在线,用户离线等)
我希望创建一个表,该表具有这些状态的工期(用户从日期到日期处于联机状态,用户从日期到日期处于脱机状态)
一个人如何去做这样的事情?有可能只使用MySQL语句吗?
附加信息:日期以unix时间戳的形式存储,其数据类型为int(12)
发布于 2019-08-18 15:52:48
起初,我考虑在一个过程中遍历行,但后来我意识到UPDATE
也迭代它们。
我向现有表中添加了三个新列(而不是为此创建一个新表),如下所示:
我创建了一个函数,用于获取一行的结束时间。
下面是我想要实现的步骤(每个步骤都是一个独立的查询)
1:如果函数存在,则删除它。
DROP FUNCTION IF EXISTS NEXTDATE;
2:创建函数
CREATE FUNCTION NEXTDATE (thisrowid mediumint(9), thistime int(12))
RETURNS int(12)
DETERMINISTIC
BEGIN
SELECT userid INTO @userid FROM status WHERE rowid = thisrowid;
SELECT status INTO @status FROM status WHERE rowid = thisrowid;
SELECT MIN(time) INTO @endtime FROM status WHERE userid = @userid AND
time > thistime AND status != @status;
RETURN @endtime;
END;
3:更新行
UPDATE status
SET endtime = NEXTDATE(rowid,time), duration = endtime - time
https://stackoverflow.com/questions/57544560
复制相似问题