gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:56:36 25 4
gpt4 key购买 nike

我试图在我的表格中获取最近 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com