文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

mysql中类似oracle的over() row_number()的功能实现

2024-04-02 19:55

关注
从网上找了很多资料,参考了如下链接,完成了一个需求:下一行的开始时间,作为上一行开始时间的结束时间。
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 





阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯