mysql partition by的实现

Mysql 8.0之前是不支持 partition by 语法的。但有类似的解决方案。我们先通过一个实例来说明。

实例

**1:**下图所示,一个零件编号有多个价格。需要筛选出 零件最新的价格。 (需要找出 PRICE_VALID_FROM最近的那条数据)。

在这里插入图片描述

2: SQL语句

SELECT MATERIAL,  VENDOR_NAME_ZH,
SUBSTRING_INDEX( GROUP_CONCAT(NET_PRICE order by PRICE_VAILD_FROM desc) ,',',1) NET_PRICE 
from t_swcas_db_part 
where  MATERIAL like '100000035-002%'and
  IS_ENABLE='1' 
and  PRICE_VAILD_FROM <= SYSDATE() and PRICE_VAILD_TO >= SYSDATE()
group by MATERIAL, VENDOR_NAME_ZH
order by material limit 10

在这里插入图片描述

关键

 SUBSTRING_INDEX( GROUP_CONCAT(NET_PRICE order by PRICE_VAILD_FROM desc) ,',',1) NET_PRICE 

这段代码分成两步部分
1:GROUP_CONCAT(NET_PRICE order by PRICE_VAILD_FROM desc)
根据 PRICE_VAILD_FROM 字段倒序排序后,把 NET_PRICE 通过“,”分隔开输出。

2:SUBSTRING_INDEX
字符串截取第一个值。

下面把过程也输出来,一目了然
在这里插入图片描述

ps:我这里因为只需要获取价格,所以只输出价格,如果需要获取整行数据的话,可以获取ID,后续再根据ID去关联。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值