mysql - MySQL 将状态更改日期转换为状态持续时间
问题描述
所以基本上我有一个记录用户状态更改的表(用户上线,用户下线等)
我想创建一个具有这些状态持续时间的表(用户从 [日期] 到 [日期] 在线,用户从 [日期] 到 [日期] 离线)
怎么做这样的事情?甚至可以仅使用 MySQL 语句吗?
附加信息:日期存储为 unix 时间戳,数据类型为int(12)
解决方案
起初我考虑在一个过程中遍历行,但后来我意识到这UPDATE
也会遍历它们。
我在现有表中添加了三个新列(而不是为此创建新表),它们如下:
- rowid(用于标识函数中的行)
- 时间结束
- 期间
我创建了一个函数来获取一行的结束时间。
这是我想要实现的 步骤(每个步骤都是一个单独的查询)
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
推荐阅读
- python - Python 和 PYODBC。我无法将结果读取到正确的字典中
- ios - 不再接受使用 UIWebView 的新应用
- ruby - For 循环在 Ruby irb 中不能使用 string.length
- mysql -
插入前删除未完成 - javascript - 迭代表行中的数据
- python - 尝试将模型从 Tensorflow 1.15.3 迁移到 Keras 和 Tensorflow 2.3.0
- sql - 如何让我的 SQL 查询删除最近的记录?
- javascript - 使用 `function` 编写类过去更快。那么为什么我们现在使用`class`呢?
- python - 特征提取:0%| | 0/25000 [00:00
import cv2 import numpy as np import os from random import shuffle from tqdm import tqdm TRAIN_DIR =
- docker - Cloud Build Docker 未构建