数据分组取最大值行

数据分组取最大行:

现有如下的业务:

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

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

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/archive/2012/11/07/2759535.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值