mysql中类似oracle的over() row_number()的功能实现
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,从网上找了很多资料,参考了如下链接,完成了一个需求:下一行的开始时间,作为上一行开始时间的结束时间。https://www.cnblogs.com/yhzh/p/6222580.html以下是自己做的
千家信息网最后更新 2025年01月23日mysql中类似oracle的over() row_number()的功能实现从网上找了很多资料,参考了如下链接,完成了一个需求:下一行的开始时间,作为上一行开始时间的结束时间。
https://www.cnblogs.com/yhzh/p/6222580.html
以下是自己做的,可以忽略
-- 说明如下:
-- 先按照设备号,用户id,book_id,阅读时间 排序
-- 然后按照设备号分组,对组内的数据按时间 依次编号
-- 首先last_device_num 为空,
-- 第一行判断 device_num = null,所以赋值1,并把第一行的device_num 传递给last_device_num;
-- 第二行时,判断device_num是否等于上一行的device_num(即last_device_num),如果等,则递增,否则为1。
-- 第二行,纯粹是用来赋值。
UPDATE
xxx p,
(SELECT
n.id,
n.begin_time,
m.begin_time AS end_time,
TIMESTAMPDIFF(
SECOND,
n.begin_time,
m.begin_time
) AS interva
FROM
(SELECT
id,
device_num,
begin_time,
IF(
@last_device_num = a.device_num,
@rank := @rank + 1,
@rank := 1
) AS row_number,
@last_device_num := a.device_num
FROM
(SELECT
*
FROM
xxx
ORDER BY device_num,
user_id,
book_id,
begin_time ASC) a,
(SELECT
@rownum := 0,
@last_device_num := NULL,
@rank := 0) b) m
RIGHT JOIN
(SELECT
id,
device_num,
begin_time,
IF(
@last_device_num1 = a.device_num,
@rank1 := @rank1 + 1,
@rank1 := 2
) AS row_number,
@last_device_num1 := a.device_num
FROM
(SELECT
*
FROM
xxx
ORDER BY device_num,
user_id,
book_id,
begin_time ASC) a,
(SELECT
@rownum1 := 0,
@last_device_num1 := NULL,
@rank1 := 1) b) n
ON m.row_number = n.row_number
AND m.device_num = n.device_num) q
SET
p.`end_time` = q.end_time,
p.`read_time` = q.interva
WHERE p.id = q.id
https://www.cnblogs.com/yhzh/p/6222580.html
以下是自己做的,可以忽略
-- 说明如下:
-- 先按照设备号,用户id,book_id,阅读时间 排序
-- 然后按照设备号分组,对组内的数据按时间 依次编号
-- 首先last_device_num 为空,
-- 第一行判断 device_num = null,所以赋值1,并把第一行的device_num 传递给last_device_num;
-- 第二行时,判断device_num是否等于上一行的device_num(即last_device_num),如果等,则递增,否则为1。
-- 第二行,纯粹是用来赋值。
UPDATE
xxx p,
(SELECT
n.id,
n.begin_time,
m.begin_time AS end_time,
TIMESTAMPDIFF(
SECOND,
n.begin_time,
m.begin_time
) AS interva
FROM
(SELECT
id,
device_num,
begin_time,
IF(
@last_device_num = a.device_num,
@rank := @rank + 1,
@rank := 1
) AS row_number,
@last_device_num := a.device_num
FROM
(SELECT
*
FROM
xxx
ORDER BY device_num,
user_id,
book_id,
begin_time ASC) a,
(SELECT
@rownum := 0,
@last_device_num := NULL,
@rank := 0) b) m
RIGHT JOIN
(SELECT
id,
device_num,
begin_time,
IF(
@last_device_num1 = a.device_num,
@rank1 := @rank1 + 1,
@rank1 := 2
) AS row_number,
@last_device_num1 := a.device_num
FROM
(SELECT
*
FROM
xxx
ORDER BY device_num,
user_id,
book_id,
begin_time ASC) a,
(SELECT
@rownum1 := 0,
@last_device_num1 := NULL,
@rank1 := 1) b) n
ON m.row_number = n.row_number
AND m.device_num = n.device_num) q
SET
p.`end_time` = q.end_time,
p.`read_time` = q.interva
WHERE p.id = q.id
一行
时间
设备
数据
用户
资料
链接
需求
分组
参考
排序
功能
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全发第34条
正规的浪潮服务器服务商哪里有
全国有几所一流网络安全学院
网络安全运营服务流程
华为手机一直正从服务器
昌平区智能网络技术客户至上
软件开发公司的业务范围
软件开发生命周期的第一步是
中国铁建软件开发好进嘛
双奥期间网络安全保障情况总结
客户机访问不到服务器
数据库怎么添加mdf
网络技术生涯规划
动态软件开发对数据库结构分析
服务器主机可以无线连接吗
达内软件开发的课程
mysql数据库 密码
js绑定下拉框数据库
天龙八部风起汴京服务器开区时间
互联网金融科技基金有哪些
泰州网络安全准入控制系统价格
江西戴尔服务器厂家电话
烟草公司网络安全
知名l2tp服务器租用公司
汕头考试软件开发常见问题
服务器自动生产线品牌
中国网络安全教育平台登录
北京信息化网络技术服务口碑推荐
科来瑞星网络安全吗
数据库中记录排序