php - MySQL 中数据库的最小值

标签 php mysql greatest-n-per-group

我正在尝试查找过去 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

现在我需要的是获得最小值。但是我的查询不起作用,它给了我错误的值,甚至在表中也不存在。

更新:

这是我更新的表结构。 enter image description here

这是我在这个表中的数据,看起来像这样 enter image description here

现在,如果您查看数据,我想检查 token omisego 的名称,并获取过去 7 天的低值,这将来自 2017-12-252017-12-19 在此转换中,低值为 9.67,但我当前的查询和我的一些成员建议的查询没有提供正确的答案。

更新 2:

http://rextester.com/TDBSV28042

在这里,基本上我有超过 1400 coinstoken 历史数据,这意味着我将有超过 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'

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

但请注意,它可能会返回多个低值相同的记录,要从这些记录中选择 1 行,您必须为不同的属性指定另一个条件

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

相关文章:

php - 我可以将 mysql 结果存储在 apc 缓存中吗?

php - json_encode 将带有 Unicode(版权)字符的字符串编码为 null?

sql - 如何获取不在oracle select sql中的GROUP BY子句中的其他列?

php - 从Docker容器访问Nginx时出现502错误的网关

php - PHP 表单错误,不断重定向到登录页面

php - Yii findByAttribute() 函数 WITH() 关系查询

MySql 自JOIN 查询

mysql - 从R中的mysql(使用for循环(?))选择数据

mysql - MYSQL SELECT 和用户组对话并显示最后一条消息

mysql - 如何对sql中的重复行进行编号