我试图找到过去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
现在,如果您查看数据,我想检查令牌的名称
omisego
并找出过去7天的低值,即从2017-12-25
到2017-12-19
在这个cast中,低值是
9.67
,但是我当前的查询和某个成员建议的查询没有给出正确的答案。更新2:
http://rextester.com/TDBSV28042
在这里,基本上我有更多的
1400
coins
和token
历史数据,这意味着对于同一日期,像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/