美文网首页工作生活
MySql 每个 user 第n大/小 数据 查询

MySql 每个 user 第n大/小 数据 查询

作者: youlianchun | 来源:发表于2019-06-30 08:57 被阅读0次

在操作sql 查询数据的时候有时候会遇到查询每一个用户第一次干嘛或者第几次干嘛的数据,这个时候往往第一想到的是group by,这边介绍一种不采用group by的实现方式,首先介绍一下我的表和数据:

CREATE TABLE `orderTable` (
  `num` int(11) DEFAULT NULL,  --数据id
  `userId` varchar(255) DEFAULT NULL, -- 用户id
  `name` varchar(255) DEFAULT NULL, --用户名称
  `time` datetime DEFAULT NULL, --时间
  `tag` int(3) DEFAULT '0' --标记(验证查询数据结果正确性)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

和表内的数据

INSERT INTO `orderTable` VALUES (1, '001', 'u001', '2019-06-08 21:48:54', 1);
INSERT INTO `orderTable` VALUES (2, '001', 'u001', '2019-06-29 21:49:16', 2);
INSERT INTO `orderTable` VALUES (3, '002', 'u002', '2019-06-06 21:49:38', 1);
INSERT INTO `orderTable` VALUES (4, '001', 'u001', '2019-06-30 21:49:58', 3);
INSERT INTO `orderTable` VALUES (5, '002', 'u002', '2019-06-30 21:50:21', 2);
INSERT INTO `orderTable` VALUES (6, '003', 'u003', '2019-06-03 21:50:50', 1);
INSERT INTO `orderTable` VALUES (7, '003', 'u003', '2019-06-05 21:51:06', 2);
INSERT INTO `orderTable` VALUES (8, '004', 'u004', '2019-06-20 21:51:26', 1);
INSERT INTO `orderTable` VALUES (9, '001', 'u001', '2019-07-02 21:53:06', 4);

现在要查找出每一个用户的第二次交易的数据

select t.* 
from (
    select  
        if(@last = t.userId, @gnum, @gnum := @gnum + 1) as gnum, 
        if(@last <> t.userId, @rnum := 1, @rnum := @rnum + 1) as rnum, 
        @last := t.userId,
        '||',
        t.*
    from 
        (select @gnum := 0, @rnum := 1, @last := '') p,
        orderTable t
    ORDER BY t.userId, t.time
) t
where t.rnum = 2

原理是通过ORDER BY对数userId和time进行排序,再为每行数据添加上gnum(group number)和group内rnum(row number),再结合通过这两个编号进行数据过滤。

相关文章

  • MySql 每个 user 第n大/小 数据 查询

    在操作sql 查询数据的时候有时候会遇到查询每一个用户第一次干嘛或者第几次干嘛的数据,这个时候往往第一想到的是gr...

  • 😍MySQL注入

    ?一、首先判断MySQL数据库版本 ' union select user(),database()+--+ 查询...

  • Hive基础

    一、Mysql无主机登录 进入数据库,展示User表的结构、查询该表,修改User表中的“host=‘%’ ”(通...

  • mysql权限的一个坑

    mysql是可以创建多个user的,并且每个user都有自己的属性,在mysql数据库的user表中有这些的详细信...

  • Linux之Mysql相关指令

    查询用户名 >mysql use mysql;Database changed>mysql select user...

  • node.js学习笔记(2)

    express+mysql 增删改查 路由:user.js 链接数据库 查询所有数据: admin.js部分: 修...

  • 2020-08-13DCL

    管理用户 查询用户①use mysql②select * from user 添加用户create user ‘用...

  • sql常用语句汇总

    1. 查询user表所有数据: select * from user 2. 查询user表中name字段所有数据:...

  • 数据库SQL常用操作语句

    1. 查询user表所有数据: select * from user 2. 查询user表中name字段所有数据:...

  • 使用mysql命令从UCSC数据库获取refseq gene i

    mysql --user=genome -N --host=genome-mysql.cse.ucsc.edu -...

网友评论

    本文标题:MySql 每个 user 第n大/小 数据 查询

    本文链接:https://www.haomeiwen.com/subject/vxuvcctx.html