• 利用sql的OVER()PARTITION 找到最相近的数值


    前几天同事问我一个问题,能不能用sql搞定这个问题:

    我这里有一个张表table1中有time1,value1,有表table2有字段time2,value2。

    现在要把table2中的value2更新到table1的value1中,要求time2距离time1最近。

    一下子就想到之前学到的over partititon,但是只是学的时候操作了几个例子,一下子也没写上来。

    后来找到一个教程http://blog.csdn.net/ayou2008/article/details/7179001

      1. select e.ename,  
      2.        e.job,  
      3.        e.sal,  
      4.        e.deptno,  
      5.        lead(e.sal, 1, 0) over(partition by e.deptno order by e.sal) lead_sal,  
      6.        lag(e.sal, 1, 0) over(partition by e.deptno order by e.sal) lag_sal,  
      7.        nvl(lead(e.sal) over(partition by e.deptno order by e.sal) - e.sal,  
      8.            0) diff_lead_sal,  
      9.        nvl(e.sal - lag(e.sal) over(partition by e.deptno order by e.sal), 0) diff_lag_sal  
      10.   from scott.emp e;  

    稍微修改一下即可,diff_lead_sal, diff_lag_sal  sal做差  两个差中找比较小的一个

    请诸位试试能不能做到。

    但是感觉效率很差,大家有没有好的方法啊?那哥们要离职了,根本不考虑太多,拿起我的方案就用...

  • 相关阅读:
    随笔
    第一次随笔
    团队战day02-接口
    团队战day01-初步搭建UI
    团队战start-确定项目以及介绍
    团队—易软
    找回感觉的练习
    第五次作业-团队作业-团队组建
    第四次博客作业-结对项目
    java第九次作业
  • 原文地址:https://www.cnblogs.com/13579net/p/3141398.html
Copyright © 2020-2023  润新知