目前公司erp开发有一个脚本需求:对于收款合同审批单和收款合同(n:1),需要获取收款审批单中最新的一条审批记录来更新其对应的收款合同的相关信息。

难点主要在对相同类别的属性进行分组然后组内排序(分组排序加序号),这类问题大致的思路,对于同类别的进行分组,组内排序标号来获取最新一条的数据,有点类似Oracle的分析函数功能。

由于mysql没有实现分析函数功能,在查询网上许多帖子也都是互相复制的也没有说清楚,根据我所遇到等坑,在此记录,分享给大家,希望能对大家有所帮助。

审批单的表结构大致如下:(红色方框内的是外键,有重复记录的id)

实现的具体SQL如下:

select * from (

      select tmp.*,

      /*看当前的parentId是否与你赋值的相等 如果相等的话说明就是同类分组中的数据rownum+1否则是新的类别的数据rownum=1*/
      @rownum:=if(@parentId=tmp.parent_id,@rownum+1,1) rownum,    
      @parentId:= tmp.parent_id parentId  /*设置 @parentId等于上一个 parent_id */

      from
      (
        select
        id,
        parent_id,
        apply_user,
        first_party_linkman,
        first_party_phone,
        create_time
        from pm_contract_approve
        where parent_id is not null
        and parent_id!=''

          /*注意这个地方的排序优先级最高的一定要是parent_id ,即以重复记录列的排序优先级最高,否则会出现列序号错误问题*/
        ORDER BY parent_id desc,create_time DESC 
      )tmp,
      (SELECT @rownum:= 0,@parentId:=null)a /*定义参数行序号rownum和变量parentId(该变量辅助必须是重复记录列的值)*/

)T

最终结果如下:

有关mysql实现oracle分析函数功能的方法的更多相关文章

  1. mysql和oracle的字符拼接方法

    不同的数据库,相应的字符串拼接方式不同,通过对比加深一下记忆. 一.MySQL字符串拼接 1.CONCAT函数 语法格式:CONCAT(char c1, char c2, ..., char cn) ...

  2. Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决

    Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决 I. 概述 1.1 JDBC概念 JDBC(Java Database Connectivity ...

  3. InstallShield在MySQL和Oracle中执行SQL脚本的方法InstallShield在MySQL和Oracle中执行SQL脚本的方法

    简述 InstallShield已经内建了对MySQL和Oracle的支持.但是这个功能是通过ODBC实现的,它对SQL脚本的格式要求非常严格,因此已经通过官方客户端测试的脚本在IS中执行时往往就会报 ...

  4. [转]oracle 分析函数over

      oracle 分析函数over 分析函数(OVER) 目录: =============================================== 1.Oracle分析函数简介 2. O ...

  5. MySQL与Oracle的主要区别

    Mysql与Oracle区别 1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高. 2. ...

  6. mysql和oracle的mybatis操作

    1.Oracle.MySQL插入时返回下一个主键的操作 Oracle:<insert id="insert" parameterClass="ROLE"& ...

  7. MySQL与Oracle 差异比较之五存储过程&Function

    存储过程&Function 编号 类别 ORACLE MYSQL 注释 1 创建存储过程语句不同 create or replace procedure P_ADD_FAC(   id_fac ...

  8. MySQL与Oracle 差异比较之三函数

    函数 编号 类别 ORACLE MYSQL 注释 1 数字函数 round(1.23456,4) round(1.23456,4) 一样:ORACLE:select round(1.23456,4) ...

  9. 转载“启动\关闭Oracle数据库的多种方法”--来自百度#Oracle

    启动\关闭Oracle数据库的多种方法 启动和关闭oracle有很多种方法. 这里只给出3种方法: l         Sql*plus l         OEM控制台 l         Wind ...

随机推荐

  1. LoadRunner(二)——性能测试过程概述

    参考学习感谢:<精通软件性能测试与LoadRunner实战> 性能测试过程概述 2.1 性能测试的基本过程 2.2 性能测试需求分析 2.3 性能测试计划 2.4 性能测试用例 2.5 测 ...

  2. react-native 常用的一些插件

    react-native 常用的一些插件 最近在做react-native的app,用到的一些好用的插件,在这儿记录一下 由于返回的后台内容是富文本编辑器Quill,返回的的是Delta对象,使用了q ...

  3. python-监控日志练习

    存在一个access.log 日志, 格式如下, 每行 以ip 地址开始: 1.需求: #1.如果同一个ip地址60s之内访问超过200次,那么就把ip加入黑名单#需求分析: #1.60秒读一次文件 ...

  4. 写书好累 <HTTP抓包实战>终于出版

    我的新书<HTTP抓包实战>终于开始在京东销售了.内容是关于HTTP包,Fiddler抓包,JMeter发包,适合任何IT工程师阅读.我将自己十年所学的知识,融会贯通总结为一本书.阅读后肯 ...

  5. NeuChar 平台使用及开发教程(六):成为开发者

    在上一篇<NeuChar 平台使用及开发教程(五):使用 NeuChar 的关键字回复服务>中,我们已经学习了如何命中关键字来反馈特定格式内容的信息,这是由微信开发者/运营者自己来维护的信 ...

  6. storm集群架构

    一.storm何许人也? Storm 是Twitter的一个开源框架.Storm一个分布式的.容错的实时计算系统,它被托管在GitHub上,遵循 Eclipse Public License 1.0. ...

  7. [SQL]LeetCode184. 部门工资最高的员工 | Department Highest Salary

    The Employee table holds all employees. Every employee has an Id, a salary, and there is also a colu ...

  8. [Swift]LeetCode337. 打家劫舍 III | House Robber III

    The thief has found himself a new place for his thievery again. There is only one entrance to this a ...

  9. [Swift]LeetCode946. 验证栈序列 | Validate Stack Sequences

    Given two sequences pushed and popped with distinct values, return true if and only if this could ha ...

  10. python-os模块使用

    1.合并路径 os.path.join("c:\\music\\ap\\0","mav.mp3") 'c:\\music\\ap\\0\\mav.mp3' 2. ...