我试图找到过去30天的最小值,在我的表中,每天有一个条目,我使用这个查询

SELECT MIN(low), date, low
FROM historical_data
WHERE name = 'bitcoin'
ORDER BY STR_TO_DATE(date,'%d-%m-%Y') DESC
LIMIT 7

但这个值并不能保证正确的值。我桌子的结构是
表结构
php - MySQL中数据库的最小值-LMLPHP
存储的表数据是这样的
表格数据样式
php - MySQL中数据库的最小值-LMLPHP
现在我需要的是得到最小的低值。但我的查询不工作,这给了我错误的价值,甚至在表中也不存在。
更新:
这是我更新的表结构。
enter image description here
这是我在这张表中的数据
enter image description here
现在,如果您查看数据,我想检查令牌的名称omisego并找出过去7天的低值,即从2017-12-252017-12-19
在这个cast中,低值是9.67,但是我当前的查询和某个成员建议的查询没有给出正确的答案。
更新2:
http://rextester.com/TDBSV28042

在这里,基本上我有更多的1400coinstoken历史数据,这意味着对于同一日期,像2017-12-25但有不同名称的条目将超过1400个,总共我有更多的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'

DEMO
对于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()
;

DEMO
但请注意,如果低值相同,它可能会返回多个记录,要在这些记录中选择一行,您需要在不同的属性上指定另一个条件

关于php - MySQL中数据库的最小值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47969398/

10-12 19:10
查看更多