问答

mysql group里获取第一个和最后一个

作者:admin 2021-07-14 我要评论

SELECT DATE_FORMAT(create_time,'%Y%m%d')times, // 时间格式化max(price) max_price, // 最高价min(price) min_price, // 最低价sum(num) num // 每天数量firs...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
SELECT 
DATE_FORMAT(create_time,'%Y%m%d')times, // 时间格式化
max(price) max_price,    // 最高价
min(price) min_price,    // 最低价
sum(num) num             // 每天数量
first(price) first_prive // [开盘价]
last(price) last_prive   // [收盘价]
FROM `bill`              // 账单
GROUP BY `times`         // 时间分组

请问下,我怎么查询到 first_prive,last_prive字段呢

###

mysql里没有现成的方法,只能找一个变通的方法,就是先把所有值拼成一个长字符串,然后再从这个长字符串中取最前面和最后面的部分,但是这样会有性能问题,如果可以忍受性能问题,目前也没有别的好的办法:

SELECT
  DATE_FORMAT(create_time, '%Y%m%d') times, // 时间格式化
  MAX(price) max_price,    // 最高价
  MIN(price) min_price,    // 最低价
  SUM(num) num,            // 每天数量
  SUBSTRING_INDEX(GROUP_CONCAT(CAST(price AS CHAR) ORDER BY create_time), ',', 1 ) first_price,
  SUBSTRING_INDEX(GROUP_CONCAT(CAST(price AS CHAR) ORDER BY create_time DESC), ',', 1 ) last_price
FROM `bill`
GROUP BY `times` // 时间分组
ORDER BY `times` // 时间排序
###

粗暴做法:
使用Mysql变量来完成上述操作。
先做一次分组查询,然后针对分组查询再做一次遍历,使用变量来取值,定义初始变量。

first_prive 与 last_price,first_prive 遇到 times 变化时取新price 值。
再对以上数据以相同逻辑倒序查询一次,获取last_price

这个功能为什么非要坚持在sql中完成,太复杂灵活了,建议挪到业务代码中。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • mysql group里获取第一个和最后一个

    mysql group里获取第一个和最后一个

  • angluar 路由选项卡无刷新切换 保留上

    angluar 路由选项卡无刷新切换 保留上

  • 如何用Nginx的rewrite语法改写apache

    如何用Nginx的rewrite语法改写apache

  • 请问这两个对象name属性值为什么会相等

    请问这两个对象name属性值为什么会相等

腾讯云代理商
海外云服务器