MySql教程

002.Mysql中实现Oacle中的rownum之@变量的用法

本文主要是介绍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之@变量的用法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!