oracle 函数 挑战

fjmwish 2013-01-31 05:55:15
谁能 看懂 下面这段代码 很有 挑战性
select * from (select name, year b1, lead(year) over(partition by name order by year) b2, lead(m,2) over(partition by name order by year) b3,rank()over(partition by name order by year) rk from t) where rk=1;
...全文
950 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fjmwish 2013-03-06
  • 打赏
  • 举报
回复
陈字文 2013-02-06
  • 打赏
  • 举报
回复
分析函数,貌似现在这个东西越来越火了,刚开始的时候确实觉着有点新奇。 分析函数大致适用于以下六种情况: ① 计算运行的总数 例如:逐行的显示一个部门的累计工资每行包括前面各行的工资总和。 ② 查找一组内的百分数 例如:显示在某些部门中付给个人的总工资的百分数,将他们的工资与该部门的工资总数相除。 ③ 前N个查询 例如:按照地区查找前N个工资最高的人或者前N份最高的销售款。 ④ 计算正在流动的平均值 例如:将当前行的值与当前N行的值加在一起计算平均数。 ⑤ 执行带等级的查询 例如:显示一个部门内一个人工资的相关等级。 引自:《oracle专家高级编程》,网上有电子版的可以下载,关于分析函数的那章节门槛非常低,适合学习
lovezxb0312 2013-02-06
  • 打赏
  • 举报
回复
with test as (select '用户1' as name ,'2011' as year from dual union all select '用户1' as name, '2012' as year from dual union all
select '用户1' as name, '2013' as year from dual union all select '用户2' as name,'2011' as year from dual union all select '用户2' as name, '2012' as year from dual union all select '用户2' as name, '2013' as year from dual union all select '用户3' as name ,'2012' as year from dual union all select '用户3' as name, '2013' as year from dual ) select name, sum(case when year=to_char(add_months(sysdate,-24),'yyyy') then year else null end) b1, sum(case when year=to_char(add_months(sysdate,-12),'yyyy') then year else null end) b2, sum(case when year=to_char(sysdate,'yyyy') then year else null end) b3 from test group by name order by name 不过楼主这个东东有点华而不实,测试了一下,结果并不理想,这才是我想要的结果!欢迎讨论!
lovezxb0312 2013-02-06
  • 打赏
  • 举报
回复
这个SQL有点小NB啊,目测他是想查出连续3年所有用户存在或使用情况,如果那一年没有就会缺失那个年份;请大家点评!
fjmwish 2013-02-04
  • 打赏
  • 举报
回复
那你就 写一个 我 觉得 不简单,向你请教了。
善若止水 2013-02-03
  • 打赏
  • 举报
回复
没看出有什么特别之处,我认为这就是简简单单的分析函数的用法。
fjmwish 2013-02-01
  • 打赏
  • 举报
回复
这是 数据库 中现有的数据 year  month amount 1991   1     1.1 1991   2     1.2 1991   3     1.3 1991   4     1.4 1992   1     2.1 1992   2     2.2 1992   3     2.3 1992   4     2.4 用这些分析函数(lead,over)写一个 sql 出来,这个 题很经典 year m1  m2  m3  m4 1991 1.1 1.2 1.3 1.4 1992 2.1 2.2 2.3 2.4
  • 打赏
  • 举报
回复
中间的lead(m,2) 应该是 lead(year, 2)吧。 另外,最后where rk=1,就只返回第一条了。 name b1 b2 a 2013-1-31 2013-1-31
raymonshi 2013-01-31
  • 打赏
  • 举报
回复
Lead() over()按照某种顺序将第下第n个位置的某一个字段值取出来,默认是往下1个位置, 楼主的这个sql,是先按照name分组,然后每组按照year排序,将下一行的year取出来。 name b1 b2 a 2013-1-31 2013-1-31 a 2013-1-31 2013-1-31 a 2013-1-31 2013-1-31 a 2013-1-31 b 2012-12-1 2012-12-2 b 2012-12-2 2012-12-3 b 2012-12-3 2012-12-4 b 2012-12-4
源码链接: https://pan.quark.cn/s/d5c270d5abd6 依据所提供的文档资料,可以掌握若干有关VirtualBox COM对象获取无法成功的问题及其应对措施。 VirtualBox作为一款广受欢迎的开源虚拟化工具,能够让用户在当前运行的操作系统上建立及执行虚拟环境。 COM(Component Object Model)对象是应用于Windows平台的一种技术,旨在促成软件组件之间的交互。 若获取VirtualBox的COM对象遭遇失败,则意味着在与VirtualBox进行交互时遇到了某些障碍,这或许源于注册表设置存在偏差或某些组件未能正确部署。 此类问题的显现通常与安装Genymotion前需先安装VirtualBox有关,但在安装VirtualBox后却遭遇COM对象获取失败的情形。 这种情况可能会干扰VirtualBox的正常运作,使用户无法进行虚拟机的管理或构建。 解决方案包括若干步骤,其核心在于对Windows注册表的编辑操作。 注册表是Windows操作系统用于存储配置数据的数据库,其中包含了系统软件与硬件的配置详情,亦涵盖了COM对象的相关信息。 一旦COM对象的注册资料出现异常,系统便无法准确加载及执行相应的组件。 根据文件所载信息,处理方案包含以下环节:1. 在Windows环境中通过“regedit”指令启动注册表编辑器。 此步骤涉及在开始菜单的运行窗口中键入指令并执行。 2. 随后,依照文件中的指引,需要在注册数据库中定位特定的键值路径。 这些路径涵盖: - HKEY_CLASSES_ROOT\CLSID\{***-0000-0000-C000-***}\InprocServer32 - HKEY_CLASSES_ROOT\CLSID...
内容概要:本文介绍了一种基于局部高斯分布拟合能量驱动的活动轮廓模型,用于图像分割任务。该方法属于区域型主动轮廓模型,通过变分水平集方法实现轮廓演化,能够有效分割具有复杂边界或弱边界的图像目标。其核心思想是利用图像局部区域的灰度统计特性,构建基于高斯分布的能量函数,使轮廓在演化过程中对噪声具有较强鲁棒性,并能准确捕捉目标边缘。该模型特别适用于不均匀光照、低对比度等挑战性图像的分割场景,Matlab代码实现便于科研人员理解算法细节并进行二次开发。; 适合人群:具备一定图像处理基础,从事计算机视觉、医学图像分析、遥感影像处理等领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决传统边缘检测方法在噪声干扰下分割效果差的问题;②实现对灰度不均、边界模糊图像的精确分割;③为后续的图像识别、目标测量等任务提供高质量的分割结果;④作为学习水平集方法与主动轮廓模型的经典案例进行教学与研究。; 阅读建议:建议读者结合Matlab代码逐步调试运行,观察水平集函数的演化过程,深入理解能量泛函构造、梯度下降法求解及水平集更新机制,同时可尝试在不同类型的图像上测试算法性能并进行参数调优。

17,136

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧