楼主: little_monkey

LAST_VALUE分析函数怎么用?

[复制链接]
论坛徽章:
5
授权会员
日期:2007-01-15 14:23:30生肖徽章:蛇
日期:2007-01-25 16:51:01ITPUB元老
日期:2007-07-06 14:54:54会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
11#
发表于 2007-2-2 08:43 | 只看该作者
關注..
等待最後結論

使用道具 举报

回复
论坛徽章:
12
生肖徽章2007版:羊
日期:2008-10-26 22:22:10咸鸭蛋
日期:2011-07-06 15:50:232010新春纪念徽章
日期:2010-03-01 11:19:58生肖徽章2007版:鸡
日期:2009-10-16 16:17:32生肖徽章2007版:虎
日期:2009-09-30 12:39:12生肖徽章2007版:虎
日期:2009-09-25 16:36:47生肖徽章2007版:羊
日期:2009-06-30 15:11:42生肖徽章2007版:猪
日期:2009-06-15 16:12:29生肖徽章2007版:马
日期:2009-03-11 15:33:29生肖徽章2007版:猴
日期:2009-02-16 11:12:16
12#
发表于 2007-2-2 08:45 | 只看该作者
學習~

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2006-12-01 16:15:06
13#
 楼主| 发表于 2007-2-2 09:18 | 只看该作者
谢谢大家的关注,但还是不知道谁的更权威。

使用道具 举报

回复
论坛徽章:
69
生肖徽章2007版:羊
日期:2008-11-14 14:42:19复活蛋
日期:2011-08-06 08:59:05ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:542012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:202012新春纪念徽章
日期:2012-02-13 15:13:20版主4段
日期:2012-05-15 15:24:11
14#
发表于 2007-2-2 11:14 | 只看该作者
[php]
对于分析函数,大家要注意:
1. 分析函数是在整个SQL查询结束后(SQL语句中的ORDER BY的执行比较特殊)再进行的操作, 也就是说
SQL语句中的ORDER BY也会影响分析函数的执行结果,请看:
SQL> select deptno,
  2         empno,
  3         ename,
  4         sal,
  5         hiredate,
  6         last_value(sal) over(partition by deptno) last_value
  7    from emp
  8   where deptno = 30;

DEPTNO EMPNO ENAME            SAL HIREDATE    last_value
------ ----- ---------- --------- ----------- -----------
    30  7499 ALLEN        1600.00 1981-02-20          950
    30  7521 WARD         1250.00 1981-02-22          950
    30  7654 MARTIN       1250.00 1981-09-28          950
    30  7698 BLAKE        2850.00 1981-05-01          950
    30  7844 TURNER       1500.00 1981-09-08          950
    30  7900 JAMES         950.00 1981-12-03          950

6 rows selected

SQL> select deptno,
  2         empno,
  3         ename,
  4         sal,
  5         hiredate,
  6         last_value(sal) over(partition by deptno) last_value
  7    from emp
  8   where deptno = 30
  9   order by deptno,mgr;

DEPTNO EMPNO ENAME            SAL HIREDATE    last_value
------ ----- ---------- --------- ----------- -----------
    30  7499 ALLEN        1600.00 1981-02-20         2850
    30  7521 WARD         1250.00 1981-02-22         2850
    30  7654 MARTIN       1250.00 1981-09-28         2850
    30  7900 JAMES         950.00 1981-12-03         2850
    30  7844 TURNER       1500.00 1981-09-08         2850
    30  7698 BLAKE        2850.00 1981-05-01         2850

6 rows selected

SQL> select deptno,
  2         empno,
  3         ename,
  4         sal,
  5         hiredate,
  6         last_value(sal) over(partition by deptno) last_value
  7    from emp
  8   where deptno = 30
  9   order by deptno,mgr desc;

DEPTNO EMPNO ENAME            SAL HIREDATE    last_value
------ ----- ---------- --------- ----------- -----------
    30  7698 BLAKE        2850.00 1981-05-01         1250
    30  7499 ALLEN        1600.00 1981-02-20         1250
    30  7521 WARD         1250.00 1981-02-22         1250
    30  7900 JAMES         950.00 1981-12-03         1250
    30  7844 TURNER       1500.00 1981-09-08         1250
    30  7654 MARTIN       1250.00 1981-09-28         1250

6 rows selected

从上面的结果我们分析得出:
a) 如果SQL语句中的Order By满足分析函数分析时要求的排序,那么SQL语句中的排序将先执行,分析
函数分析时就不必再排序
b) 如果SQL语句中的Order By不满足分析函数分析时要求的排序,那么SQL语句中的排序将最后在分
析函数分析结束后执行排序


2. 分析函数中包含三个分析子句:分组(Partition By), 排序(Order By), 窗口(Window)
窗口就是分析函数分析时要处理的数据范围,就拿SUM来说, 它是SUM窗口中的记录而不是整个分组中
的记录,因此我们在想得到某个栏位的累计值时, 我们需要把窗口指定到该分组中的第一行数据到当
前行, 如果你指定该窗口从该分组中的第一行到最后一行,那么该组中的每一个SUM值都会一样,即整
个组的总和.
窗口子句在这里我只说rows方式的窗口,range方式的这里不提, 此外滑动窗口也不提. 窗口子句中
我们经常用到指定第一行,当前行,最后一行这样的三个属性. 第一行是 unbounded preceding, 当
前行是 current row, 最后一行是 unbounded following.

出现窗口子句,必须指定Order By子句, 如:
last_value(sal) over
(partition by deptno order by sal rows between unbounded preceding and unbounded following)
以上示例指定窗口为整个分组.

当省略窗口子句时:
a) 如果存在Order By则默认的窗口是unbounded preceding and current row
b) 如果同时省略Order By则默认的窗口是unbounded preceding and unbounded following

如果省略分组,则把全部记录当成一个组:
a) 如果存在Order By则默认窗口是unbounded preceding and current row
b) 如果这时省略Order By则窗口默认为unbounded preceding and unbounded following

希望以上信息对大家有所帮助!
[/php]

使用道具 举报

回复
论坛徽章:
24
生肖徽章:狗
日期:2006-09-07 10:14:43数据库板块每日发贴之星
日期:2008-07-26 01:02:20生肖徽章2007版:兔
日期:2008-10-13 11:10:11奥运会纪念徽章:铁人三项
日期:2008-10-24 13:27:21开发板块每日发贴之星
日期:2008-12-27 01:01:09生肖徽章2007版:马
日期:2009-11-18 10:45:032010新春纪念徽章
日期:2010-03-01 11:21:02ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51ERP板块每日发贴之星
日期:2011-05-18 01:01:01ITPUB十周年纪念徽章
日期:2011-11-01 16:21:15
15#
发表于 2007-2-2 16:11 | 只看该作者
多谢版主了,很清晰!

使用道具 举报

回复
论坛徽章:
0
16#
发表于 2007-2-2 17:17 | 只看该作者
終于弄懂了﹐多謝

使用道具 举报

回复
论坛徽章:
64
会员2007贡献徽章
日期:2007-09-26 18:42:10NBA常规赛纪念章
日期:2008-04-18 19:48:16欧洲冠军杯纪念徽章
日期:2008-05-23 14:31:342009新春纪念徽章
日期:2009-01-04 14:52:28NBA常规赛纪念章
日期:2009-04-16 14:28:42NBA季后赛纪念徽章
日期:2009-06-16 11:28:172010新春纪念徽章
日期:2010-01-04 08:33:08
17#
发表于 2007-2-2 17:29 | 只看该作者
nyfor 真是厉害,能理解就不容易了,能说并写出来更是难啊。多谢了。

使用道具 举报

回复
论坛徽章:
5
生肖徽章:虎
日期:2006-09-06 21:14:00生肖徽章:蛇
日期:2006-09-06 21:14:08生肖徽章:鸡
日期:2006-09-07 17:09:34数据库板块每日发贴之星
日期:2006-10-14 01:02:29生肖徽章:猪
日期:2006-10-18 20:29:00
18#
发表于 2007-2-2 17:45 | 只看该作者
nyfor的解釋很不錯﹐看來很多東西還是要用不同的情況進行測試才能真正的理解

使用道具 举报

回复
论坛徽章:
3
会员2007贡献徽章
日期:2007-09-26 18:42:10生肖徽章2007版:鼠
日期:2008-01-02 17:35:532013年新春福章
日期:2013-02-25 14:51:24
19#
发表于 2007-2-3 08:36 | 只看该作者
学习了...谢谢

使用道具 举报

回复
论坛徽章:
2
2014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02
20#
发表于 2007-7-7 10:08 | 只看该作者
这两个都是对的,我已经测过了

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表