数据分组取最大值行

数据分组取最大行:

现有如下的业务:

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

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

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

原文地址:https://www.cnblogs.com/caroline/p/2759535.html