mysql中类似oracle的over() row_number()的功能实现
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,从网上找了很多资料,参考了如下链接,完成了一个需求:下一行的开始时间,作为上一行开始时间的结束时间。https://www.cnblogs.com/yhzh/p/6222580.html以下是自己做的
千家信息网最后更新 2025年11月07日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安全错误
数据库的锁怎样保障安全
网络数据库安全性论文
网络技术管理并重
读计算机网络技术好吗
家里无线网安全还是4g网络安全
无线路由网络安全
计算机网络技术三级考试曾题
监控服务器性能python
idc存储服务器市场研究报告
挖财网络技术有限公司 催收
留言数据库
oa网络安全要求
服务器可以使用pe安装吗
天灾惊变网易版服务器
网络课堂软件开发公司
梦幻西游私服服务器端是哪个文件
sql 数据库自动备份
襄阳市网络安全等级保护政策
云手机的网络安全
电子书数据库软件系统
网络技术科 主管职责
考研英语作文网络安全
数据库中的函数有什么优点
asp.net网站服务器
win7 应用程序服务器
软件开发 酒仙桥
网络技术与实践实验四
北京市程序软件开发公司
图形数据库 数据储存方式
建党百年网络安全保障
销售数据库技术