zoukankan      html  css  js  c++  java
  • MySQL5.7 over partition by

    获取 code 分组中 max(version) max(batch) 最大的 记录

    ```
    CREATE TABLE t (
      `id` int(11) ,
      `code`  int(11) ,
      `version` int(11) ,
      `batch`  int(11) 
    )
    
    insert into t values(1, 1, 1, 1);
    insert into t values(2, 1, 2, 2);
    insert into t values(3, 1, 3, 3);
    insert into t values(4, 2, 1, 1);
    insert into t values(5, 2, 1, 1);
    insert into t values(6, 3, 1, 1);
    insert into t values(7, 3, 1, 3);
    
    select id,code,version,batch
    from
    (select
    t_tmp.code,
    t_tmp.version,
    t_tmp.batch,
    t_tmp.id,
    @rownum:=@rownum+1,
    if(@pdept=t_tmp.code,@rank:=@rank+1,@rank:=1) as rank,
    @pdept:=t_tmp.code
    from
    (select code,id,version,batch
    from t
    order by code,version desc, batch desc
    ) t_tmp ,
    (select @rownum :=0,@pdept := null ,@rank:=0) a
    ) a where rank=1
    ;
    
    ---  解释
    
    
    select id,code,version,batch
    from
      (
      select
        t_tmp.code,
        t_tmp.version,
        t_tmp.batch,
        t_tmp.id,
        -- 每行+1
        @rownum:=@rownum+1,
        -- 如果变量的值等于code的值 排名+1, 如果不等于就是1(@pdept记录的是上一行的code值)
        if(@pdept=t_tmp.code,@rank:=@rank+1,@rank:=1) as rank,
        -- 这个变量的值等于行中code的值
        @pdept:=t_tmp.code
      from
        (select code,id,version,batch
        from t
        order by code,version desc, batch desc
        ) t_tmp ,
      -- mysql定义变量 下面这句话,初始化下面变量的值
      (select @rownum :=0,@pdept := null ,@rank:=0) a
      ) a 
      -- 排名第一的选出来
      where rank=1;
  • 相关阅读:
    C++中两种获取UUID的方法(编程)
    在python中发送自定义消息
    lib,dll的位置
    GetWindowText
    SuspendThread and ResumeThread
    创建线程检查按钮的状态
    C++检测句柄的权限
    POJ2186 强联通
    POJ2186 强联通
    POJ 1201 差分约束(集合最小元素个数)
  • 原文地址:https://www.cnblogs.com/similarface/p/13645622.html
Copyright © 2011-2022 走看看