MySql - 选择 MAX 和 MIN 并返回相应的行

标签 mysql

我试图在我的表格中获取最近 6 个月的最小和最大价格,并按月将它们显示为一组。我的查询没有返回相应的行值,例如最高价或最低价的日期时间。

我想选择最低和最高价格及其发生的日期时间以及该行的其余数据... (我对 report_term 使用 concat 的原因,因为我需要在显示结果时将其与数据集一起打印。例如,2018 年 2 月 -> ....,2018 年 1 月 -> ...)

SELECT metal_price_id, CONCAT(MONTHNAME(metal_price_datetime), ' ', YEAR(metal_price_datetime)) AS report_term, max(metal_price) as highest_gold_price, metal_price_datetime FROM metal_prices_v2 
WHERE metal_id = 1
AND DATEDIFF(NOW(), metal_price_datetime) BETWEEN 0 AND 180
GROUP BY report_term
ORDER BY  metal_price_datetime DESC

我做了一个例子,从我的数据库中提取: http://sqlfiddle.com/#!9/617bcb2/4/0

我想要的结果是查看按月份、最低日期、最高日期......以及过去 6 个月内的所有价格分组的最低和最高价格。

谢谢

更新。 下面的代码有效,但它会返回超过指定 180 天的返回行。我刚刚检查过,这是因为它以多年来可能重复多次的价格加入....参见:http://sqlfiddle.com/#!9/5f501b/1

最佳答案

您可以在子选择上对最小值和最大值使用两次内部联接

select   a.metal_price_datetime
         , t1.highest_gold_price
         , t1.report_term
         , t2.lowest_gold_price
         ,t2.metal_price_datetime

  from metal_prices_v2 a
  inner join (
      SELECT  CONCAT(MONTHNAME(metal_price_datetime), ' ', YEAR(metal_price_datetime)) AS report_term
               , max(metal_price) as highest_gold_price

      from metal_prices_v2
      WHERE metal_id = 1
      AND DATEDIFF(NOW(), metal_price_datetime) BETWEEN 0 AND 180
      GROUP BY report_term
  ) t1 on t1.highest_gold_price = a.metal_price
  inner join (
     select   a.metal_price_datetime
         , t.lowest_gold_price
         , t.report_term

  from metal_prices_v2 a
  inner join (
      SELECT  CONCAT(MONTHNAME(metal_price_datetime), ' ', YEAR(metal_price_datetime)) AS report_term
               , min(metal_price) as lowest_gold_price

      from metal_prices_v2
      WHERE metal_id = 1
      AND DATEDIFF(NOW(), metal_price_datetime) BETWEEN 0 AND 180
      GROUP BY report_term
  ) t on t.lowest_gold_price = a.metal_price

 ) t2 on t2.report_term = t1.report_term

关于MySql - 选择 MAX 和 MIN 并返回相应的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48889078/

相关文章:

php - 以unicode在数据库中输入值

mysql - 如何在mysql中启用only_full_group_by的情况下获取group by语句的单个值

mysql - Innodb表文件大小

mysql - 这个MySQL连接查询可以优化吗?

php - 至少两个匹配字段(mysql)

sql - VARCHAR 和 CHAR 有什么区别?

mysql - 是不是 Memcached 和 Innodb 中的 Buffer pool 做同样的工作?

mysql - 网站在这里,链接到其他服务器上的数据库?

mysql Dump 没有将完整的数据写入文件

php - 为什么我无论如何都要连接数据库