002.Mysql中实现Oacle中的rownum之@变量的用法
2022/2/11 19:12:57
本文主要是介绍002.Mysql中实现Oacle中的rownum之@变量的用法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Mysql中实现Oacle中的rownum之@变量的用法
基本示例:
select (@i:= @i+1) as rownum,t.* from t_visit t,(select @i:=0) as a;
先声明赋值,再使用
select @i:=0;
这里就是先声明@i这个变量,并且初始化值为0
@i:=@i+1
这里就是使用这个值,变量@i进行自增,等同于 i+=1
sql查询示例
例:sql编写,有一张表t_visit内容如下:
store | visit_date |
---|---|
家乐福古北店 | 2010-02-16 |
家乐福古北店 | 2010-01-30 |
家乐福古北店 | 2010-01-17 |
家乐福古北店 | 2010-01-07 |
家乐福巨峰店 | 2010-02-08 |
家乐福巨峰店 | 2010-02-06 |
莲花高中店 | 2010-03-01 |
如果要查出每个Store按照日期进行排列的拜访序号,并列出上次的拜访时间,结果集如下,该如何写sql语句?(只允许用一个sql语句)
store | visit_date | pre_visit_date | sequence |
---|---|---|---|
家乐福古北店 | 2010-02-16 | 2010-01-30 | 4 |
家乐福古北店 | 2010-01-30 | 2010-01-17 | 3 |
家乐福古北店 | 2010-01-17 | 2010-01-07 | 2 |
家乐福古北店 | 2010-01-07 | null | 1 |
家乐福巨峰店 | 2010-02-08 | 2010-02-06 | 2 |
家乐福巨峰店 | 2010-02-06 | null | 1 |
莲花高中店 | 2010-03-01 | null | 1 |
1.建表
create table t_visit ( store varchar(20) null, visit_date varchar(20) null );
2.插入数据
INSERT INTO t_visit (store, visit_date) VALUES ('家乐福古北店', '2010-02-16'); INSERT INTO t_visit (store, visit_date) VALUES ('家乐福古北店', '2010-01-30'); INSERT INTO t_visit (store, visit_date) VALUES ('家乐福古北店', '2010-01-17'); INSERT INTO t_visit (store, visit_date) VALUES ('家乐福古北店', '2010-01-07'); INSERT INTO t_visit (store, visit_date) VALUES ('家乐福巨峰店', '2010-02-08'); INSERT INTO t_visit (store, visit_date) VALUES ('家乐福巨峰店', '2010-02-06'); INSERT INTO t_visit (store, visit_date) VALUES ('莲花高中店', '2010-03-01');
3.数据查询
select * from t_visit;
4.本示例查询sql
select a.store,a.visit_date,a.pre_visit_date,a.sequence from ( select -- rownum 判断 @pre_parent_code是否和当前的parent_code一样 ,true:让 @i+=1 false:重置@i t.*, (@i := case when @pre_parent_store = store then @i + 1 else 1 end ) sequence, (@pre_visit_date := case when @pre_parent_store=store then @pre_parent_date else 'null' end ) as pre_visit_date, -- 设置 @pre_parent_date等于上一个 visit_date (@pre_parent_date:=visit_date), -- 设置 @pre_parent_store 等于上一个 store (@pre_parent_store:=store) from (select * from t_visit order by store,visit_date) t, (SELECT @i := 0, @pre_parent_store:='') AS a group by store,visit_date order by store,visit_date desc ) a;
这篇关于002.Mysql中实现Oacle中的rownum之@变量的用法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-04-26MySQL查出时间比实际晚8小时的解决方案
- 2024-04-01JPA不识别MySQL的枚举类型
- 2024-03-30mysql数据库表卡死解决方法
- 2024-03-15MySQL多数据源笔记5-ShardingJDBC实战
- 2024-03-11natural join mysql
- 2024-03-11关于VS2017,VS2015 中利用 EF使用Mysql 不显示数据源问题解决方案
- 2024-02-26mysql 阿里云xb后缀备份文件恢复-icode9专业技术文章分享
- 2024-02-22docker mysql 5.7
- 2024-02-18从 20 多套 MySQL 到 1 套 TiDB丨骏伯网络综合运营管理平台应用实践
- 2024-02-07mysql 外键索引入门介绍,为什么工作中很少有人使用?