zoukankan      html  css  js  c++  java
  • orcle分析函数

    一、问题描述:

    关务里拆分清单时要求:合并同一表头对应表体的 项号、币制、产销国(地区),将三个字段相同的数据归为一项,并生成一个递增的商品序号。从1开始。

    解决方法:(DENSE_RANK分析函数)

                  SELECT to_number(DENSE_RANK() OVER (PARTITION BY HEAD_OID ORDER BY HEAD_OID,EM_G_NO,CURR,COUNTRY_CODE)) as id

                         FROM GW_CUSTOMS_BILL_LIST_PRE;
    row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序)  不存在相同序号 如: 1,2,3,4
    rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)  如:1 ,2 ,2 ,4
    dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。 如:1 ,2 ,2 ,3

    PARTITION BY:分组条件,就是按哪些字段进行分组

    ORDER BY:组内排序


    二、问题描述
    问题描述:B表:为币制表,有 币制、日期 字段,同一个币制在不同时期的汇率是不一样的;

    A表:有 总价、币制、申报日期 字段。

    要求:

    A表根据币制关联B表取汇率,将总价转换成美元总价。

    币制取汇率方法:

    第一步(关联):关联币制得出记录(A的1条记录对就多条B的记录,结果字段:A.申报日期,A.币制,B.日期,B.汇率)

    第二步(筛选):筛选出A表的申报日期大于B表日期(汇率对应的日期必须在申报日期之前:B.日期<A.申报日期)

    第三步(取汇率):同一币制取B表中最晚日期对应的汇率。


    解决方法:(分析函数)

    select distinct a.oid, a.curr,a.dec_total,a.inserttime,b.org_curr,b.input_er,

    a.dec_total/( FIRST_VALUE(B.tax) OVER(PARTITION BY B.org_curr ORDER BY B.eff_date desc)) from gw_customs_bill_list_pre a,

     GW_INFO_TAX b where a.curr=b.org_curr and a.inserttime>b.eff_date
     

    语法:

    FIRST_VALUE(取值字段) OVER(PARTITION BY 分组字段 ORDER BY 排序字段)) from 表名

    按“分组字段”进行分组,排“排序字段”排序,

    FIRST_VALUE()取出“取值字段”记录中最大的值。

    三、按关健字分组,排序后,加序号。

    select exchange_rate_date, base_curr, change_curr,
    row_number() over(partition by exchange_rate_date, base_curr, change_curr order by modify_date) id
    FROM bi_exchange_rate

  • 相关阅读:
    Redis5设计与源码分析 (第17章 HyperLogLog相关命令的实现)
    Redis5设计与源码分析 (第16章 GEO相关命令)
    ES5和ES6函数的this指向
    vue响应式原理 (响应式并不等于数据双向绑定,千万不要混淆)
    vue中data为什么是函数而不是对象
    vue-enum 前端常量 枚举工具
    Vue3 写业务逻辑不适合用TS(TypeScript)
    vue-property-decorator vue3 ts 用的装饰器
    github git clone下载加速 && npm install 下载加速
    vue3 如果用ts,导出时候要用 defineComponent,这俩是配对的,为了类型的审查正确
  • 原文地址:https://www.cnblogs.com/xbding/p/2336788.html
Copyright © 2011-2022 走看看