• 按某个字段来分组、编号的row_number()函数


      本文参考

        http://zhidao.baidu.com/link?url=8su4F16Et8Q0S3FmybwniJSI51Ms0AeVujcEXhyEaZh3u5LlOng5Xri_9zHsl73eEnxAswQkHe3x3OZd-jgSSa

        http://www.cnblogs.com/fxgachiever/archive/2010/09/15/1826792.html

      今天我遇到这样的一个问题,我要取TableA中的School分组中的一条最新记录,是每个School分组中的一条。

    比如:School列中有如下3种值,GDUT,SYSU,SCUT,那么我的要求就是分别获取GDUT,SYSU,SCUT最新的记录,

    排序依靠插入的记录的时间InsDate字段。

      本人是SQL小白,所以不太懂?So,百度。。。。。。看到别人给出的答案如下:

    select * from
    (
    select row_number() over(partition by '分组' order by '日期' desc) as rownum -- 排序并分组
    , * -- 所需显示的字段
    from TableA
    ) as T
    where T.rownum = 1

    按照他的提示,果然能实现我想要的东西。一高兴,就写下篇博客记录一下本人的理解,高手勿喷。。。。

    【partition】:有道了一下 ,意思是分割、分隔、区分。这里的作用是TableA根据'分组'这个字段来分组,所以

             变成GDUT一个组,SYSU一个组,SCUT一个组,分组是为了使用Row_number()函数。

    【oerder】   :跟我们平时使用的Order 的作用一样,是跟分组按某个字段进行排序,这里是按'日期'来排序

    【row_number】:是给分组排序,每个分组的序号都从1开始,比如GDUT组有10条记录,序号就是1-10,SYSU组

              有15条记录,序号就是1-15.

    【rownum】:这是只是给分组后的序号一个别名。

    【*】:查询TableA表的所有字段,select row_number() over(partition by '分组' order by '日期' desc) as rownum ,*
    from TableA 有种视图的味道。

    【T】:T也只是一个别名。

    【T.rownum = 1】:T表中rownum=1的列,就是说最新的一列

     

  • 相关阅读:
    docker search 报错
    mgo连接池
    饿了么这样跳过Redis Cluster遇到的“坑”
    Linux Swap的那些事
    epoll使用详解(精髓)(转)
    select、poll、epoll之间的区别总结[整理](转)
    git merge 和 git rebase 小结(转)
    linux查看端口占用情况
    [LeetCode] Combinations——递归
    C++中的static关键字的总结(转)
  • 原文地址:https://www.cnblogs.com/WEI-CONG/p/3955737.html
Copyright © 2020-2023  润新知