首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL转换状态将日期更改为状态持续时间

MySQL转换状态将日期更改为状态持续时间
EN

Stack Overflow用户
提问于 2019-08-18 12:28:00
回答 1查看 44关注 0票数 0

因此,基本上,我有一个表,其中用户的状态更改了被记录(用户在线,用户离线等)

我希望创建一个表,该表具有这些状态的工期(用户从日期到日期处于联机状态,用户从日期到日期处于脱机状态)

一个人如何去做这样的事情?有可能只使用MySQL语句吗?

附加信息:日期以unix时间戳的形式存储,其数据类型为int(12)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-18 15:52:48

起初,我考虑在一个过程中遍历行,但后来我意识到UPDATE也迭代它们。

我向现有表中添加了三个新列(而不是为此创建一个新表),如下所示:

  • rowid (用于标识函数中的行)
  • 终时
  • 持续时间

我创建了一个函数,用于获取一行的结束时间。

下面是我想要实现的步骤(每个步骤都是一个独立的查询)

1:如果函数存在,则删除它。

代码语言:javascript
运行
复制
DROP FUNCTION IF EXISTS NEXTDATE;

2:创建函数

代码语言:javascript
运行
复制
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:更新行

代码语言:javascript
运行
复制
UPDATE status
SET endtime = NEXTDATE(rowid,time), duration = endtime - time
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57544560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档