zoukankan      html  css  js  c++  java
  • 数据分组取最大值行

    数据分组取最大行:

    现有如下的业务:

    当前存在库房表,库房在每年都进行维护,每次维护后,会记录库房中商品的数量和维护的数量,在每年会不定期的进行维护:

    当前需要统计每年的库房中最新的信息:即最新月份的数据:如下所示表结构:

    1 SELECT t.*,
    2        t.rowid
    3   FROM stores t

    那么目前,需要求出的数据是

    2012-10、2011-06、2010-12三条数据,即根据年份分租找到其中最大的行记录:

    可以采用以下两种方式去实现:

    1、使用MAX()

    1  SELECT t.*,
    2         t.rowid
    3    FROM stores t
    4   WHERE t.times IN
    5         (SELECT MAX(t.times) FROM stores t GROUP BY substr(t.times, 1, 4))

    2、使用分析函数,OVER/PARTATION ROWNUMBER

    1 SELECT *
    2   FROM (SELECT t.*,
    3                row_number() over(PARTITION BY substr(t.times, 1, 4) ORDER BY t.times DESC) rn
    4           FROM stores t)
    5  WHERE rn = 1;

    以上两种方式的SQL语句均可以实现结果:

    使用DECODE进行行转列统计:(decode哪列则不group by哪列

    1 SELECT MAX(decode(cols.times, '2012-10', cols.store_number)) AS "2012",
    2        MAX(decode(cols.times, '2011-06', cols.store_number)) AS "2011",
    3        MAX(decode(cols.times, '2010-12', cols.store_number)) AS "2010"
    4   FROM (SELECT *
    5           FROM stores t
    6          WHERE t.times IN (SELECT MAX(t.times)
    7                              FROM stores t
    8                             GROUP BY substr(t.times, 1, 4))) cols

  • 相关阅读:
    SPSS时间序列:频谱分析
    PureBasic—数控编辑框与调节块和进度条
    DELPHI2007 安装ACTIVEX插件的方法
    C++ builder的文件操作
    C++动态数组
    excel快速复制大量公式的方法
    Delphi XE5 如何与其他版本共存
    PureBasic 集成Form设计器的使用
    VS C++ 从一个窗口创建另一个窗口
    ENVI 5.0 Beta 体验——影像数据的显示
  • 原文地址:https://www.cnblogs.com/caroline/p/2759535.html
Copyright © 2011-2022 走看看