Mysql 如何根据历史数据找到1天、1个月的最大输家

Mysql 如何根据历史数据找到1天、1个月的最大输家,mysql,Mysql,我有以下用于存储历史数据的表结构 CREATE TABLE `historical_data` ( `symbol_name` varchar(70) DEFAULT NULL, `current_day` varchar(50) DEFAULT NULL, `open_val` varchar(50) , `low_val` varchar(50) , `close_val` varchar(50) , `high_val

我有以下用于存储历史数据的表结构

  CREATE TABLE `historical_data` (
      `symbol_name` varchar(70) DEFAULT NULL,
      `current_day` varchar(50) DEFAULT NULL,
      `open_val` varchar(50) ,
      `low_val` varchar(50) ,
     `close_val` varchar(50) ,
     `high_val` varchar(50) ,
      `prevclose_val` varchar(50) 
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
这是我的样本数据

从当前日期开始,我试图找出从当前日期起1周和1个月内的最大输家

我试过如下方法

select symbol_name, (prevclose_val-close_val) as losers  from historical_data 
order by losers asc limit 10
你能告诉我怎样才能使这项工作持续一周零一个月吗

样本数据将采用此格式

 Insert Into historical_data values('SBIN','14-DEC-2015','300.10','289.00','305.10','309.90','256.30');
sql小提琴


您可以这样做*:

select * from (select symbol_name , (prevclose_val-close_val) as losers,'daily' as `type` from historical_data where current_day >= '2015-12-14' order by losers asc limit 10 ) as sub_daily
union
select * from (select symbol_name , (prevclose_val-close_val) as losers,'weekly' as `type` from historical_data where current_day >= '2015-12-7' order by losers asc limit 10 ) as sub_weekly
union
select * from (select symbol_name , (prevclose_val-close_val) as losers,'monthly' as `type` from historical_data where current_day >= '2015-11-14' order by losers asc limit 10 ) as sub_monthly;
顺便说一下,您应该将日期字段从“varchar”改为“date”或“DATETIME”,并使用
yyyy-mm-dd
格式显示日期。这样,您就可以使用MySQL对日期进行计算


*此查询要求您的
current\u day
字段为
date
datetime
类型。

为什么要将日期添加为varchar?改为使用
DATE
DATETIME
TIME
,然后可以使用mysql中内置的特定于日期的算术函数。示例数据似乎缺失。此外,如果您能提到您在已经尝试过的内容上遇到了哪些具体错误,这也会有所帮助。@PaulJAbernathy我已经添加了示例数据。“1周/1个月”是什么意思?之间每天?对于每周/每月?在处理该日期之前,最好将其转换为正确的日期格式。看见