zoukankan      html  css  js  c++  java
  • postgre sql分组后排序取前/后几个值

    这是个很常见的需求,我一般的写法是

    SELECT * FROM test T
     WHERE  NOT EXIT(SELECT 1 FROM test WHERE group=T.group AND T.time >time )
    

      其中,group是分组字段,time是排序字段,上一句sql是按group分组,取每一组最新时间的数据

    但是有一天数据出问题了,死活分不了组,于是乎寻找其他解决方案

    SELECT *  FROM test from 
    (SELECT test.*,row_number() over(partition by group order by time desc) rn from test) T
    where rn =1 

    这个row_number是干啥子的呢,简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的没条xlh记录返回一个序号。

    row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

       

  • 相关阅读:
    创建商品APP
    商品模块表结构分析
    sprintf 和 fprintf
    linux中sys目录
    linux中proc目录
    ioctl()函数
    ffmpeg下载安装
    【转】写给小白的实时音视频技术入门提纲
    linux常见目录解释
    linux nfs客户端开启失败解决办法
  • 原文地址:https://www.cnblogs.com/nanguabushuohua/p/8336611.html
Copyright © 2011-2022 走看看