zoukankan      html  css  js  c++  java
  • mysql实例---sql语句中使用@变量

    本文介绍下,在mysql语句中使用@变量的一个例子,学习下这个特殊变量的用法,有需要的朋友参考下吧。
    要求:

    计算用户距上次访问的天数,根据imei号区分不同的用户,如果时间段内只有一次访问则为0。

    初始化数据: 
     

    复制代码代码示例:

    CREATE TABLE `pd` ( 
      `imei` varchar(32) NOT NULL DEFAULT '', 
      `dat` datetime DEFAULT NULL 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    -- ---------------------------- 
    -- Records of pd 
    -- www.jbxue.com
    -- ---------------------------- 
    INSERT INTO `pd` VALUES ('1', '2013-07-25 00:00:01'); 
    INSERT INTO `pd` VALUES ('1', '2013-07-26 00:00:02'); 
    INSERT INTO `pd` VALUES ('2', '2013-07-23 00:00:04'); 
    INSERT INTO `pd` VALUES ('2', '2013-07-26 00:00:03'); 
    INSERT INTO `pd` VALUES ('3', '2013-07-26 00:00:01');

    脚本,使用@特殊变量: 
     

    复制代码代码示例:
    select * from ( 
        select imei user_id, max(max_dd) , max(max_dd_2), to_days( max(max_dd)) - to_days(max(max_dd_2)) days  from (
            select imei, max_dd, max_dd_2 from ( 
                  select tmp.imei, tmp.dates, 
                               if(@imei=tmp.imei, @rank:=@rank+1,@rank:=1) as rank, 
                          if(@rank = 1, @max_d := tmp.dates, @max_d := null) as max_dd, 
                          if(@rank = 2, @max_d_2 := tmp.dates, @max_d_2 := null) as max_dd_2, 
                                @imei:=tmp.imei 
                  from (select imei, dates from pb order by imei asc ,dates desc ) tmp , 
                    (select @rownum :=0 , @imei := null ,@rank:=0, @max_d :=null, @max_d_2 := null) a 
          ) result 
        ) t 
        group by imei 
        having count(*) > 1 
    ) x where x.days >= 1 and EXISTS (select 'x' from pb where dates > '2013-07-26 00:00:00')

    注意:
    表数据量较大时,使用union all等操作将会有悲剧性的结果。
    本文原始链接:http://www.jbxue.com/db/11874.html

  • 相关阅读:
    [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化
    [原] KVM 虚拟化原理探究(5)— 网络IO虚拟化
    [原] KVM 虚拟化原理探究(4)— 内存虚拟化
    [原] KVM 虚拟化原理探究(3)— CPU 虚拟化
    [原] KVM 虚拟化原理探究(2)— QEMU启动过程
    [原] KVM虚拟机网络闪断分析
    [原] KVM 环境下MySQL性能对比
    [源]云计算技术堆栈系列——鸟瞰
    [原] 利用 OVS 建立 VxLAN 虚拟网络实验
    [原] Cgroup CPU, Blkio 测试
  • 原文地址:https://www.cnblogs.com/linuxnotes/p/3329528.html
Copyright © 2011-2022 走看看