我正在尝试查找过去 30 天的最小值,在我的表中每天都有一个条目,我正在使用此查询
SELECT MIN(low), date, low
FROM historical_data
WHERE name = 'bitcoin'
ORDER BY STR_TO_DATE(date,'%d-%m-%Y') DESC
LIMIT 7
但是这个值没有返回正确的值。我的表的结构是
存储的表数据是这样的
现在我需要的是获得最小值。但是我的查询不起作用,它给了我错误的值,甚至在表中也不存在。
更新:
这是我更新的表结构。 enter image description here
这是我在这个表中的数据,看起来像这样 enter image description here
现在,如果您查看数据,我想检查 token omisego
的名称,并获取过去 7 天的低值,这将来自 2017-12-25
到 2017-12-19
在此转换中,低值为 9.67
,但我当前的查询和我的一些成员建议的查询没有提供正确的答案。
更新 2:
http://rextester.com/TDBSV28042
在这里,基本上我有超过 1400
coins
和 token
历史数据,这意味着我将有超过 1400 个条目对于相同的日期,如 2017-12-25
但名称不同,我总共有超过 650000
记录。所以每个日期都有许多不同名称的条目。
最佳答案
要获得每组的最低行,您可以使用以下
SELECT a.*
FROM historical_data a
LEFT JOIN historical_data b ON a.name = b.name
AND a.low > b.low
WHERE b.name IS NULL
AND DATE(a.date) >= '2017-12-19' AND DATE(a.date) <= '2017-12-25'
AND a.name = 'omisego'
或
SELECT a.*
FROM historical_data a
JOIN (
SELECT name,MIN(low) low
FROM historical_data
GROUP BY name
) b USING(name,low)
WHERE DATE(a.date) >= '2017-12-19' AND DATE(a.date) <= '2017-12-25'
AND a.name = 'omisego'
对于 7 天或 n 天的最后 30 天,您可以将上述查询写为
SELECT a.*, DATE(a.`date`)
FROM historical_data2 a
LEFT JOIN historical_data2 b ON a.name = b.name
AND DATE(b.`date`) >= CURRENT_DATE() - INTERVAL 30 DAY
AND DATE(b.`date`) <= CURRENT_DATE()
AND a.low > b.low
WHERE b.name IS NULL
AND a.name = 'omisego'
AND DATE(a.`date`) >= CURRENT_DATE() - INTERVAL 30 DAY
AND DATE(a.`date`) <= CURRENT_DATE()
;
但请注意,它可能会返回多个低值相同的记录,要从这些记录中选择 1 行,您必须为不同的属性指定另一个条件
关于php - MySQL 中数据库的最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47969398/