我有一张由股市每日数据组成的表格。它每天由不同数量的行组成。我在表中有一个名为“High”的列。现在我需要计算最近3周的MAX(高)。例如: - 如果今天是星期三,我需要计算上周五的星期五以及本周的星期一,星期二。我知道如果我使用像这样的查询手动知道日期,我就可以这样做。
Select MAX(HIGH) from table_name where date>='date'
但是我不想这样做,我只想用PHP编写的程序自动执行此操作。我怎样才能实现这一点,无论是PHP还是SQL,都可以获得任何帮助。我的表只有6列
date,time,open,high,low,close
假设我的桌子是这样的
date time open high low close
2015-05-06 09:30:00 2012.50 2020.5 2016.5 2014.0
2015-05-06 09:31:00 2013.50 2021.5 2014.5 2016.0
2015-05-06 09:32:00 2014.50 2021.75 2017.5 2013.0
2015-05-07 09:30:00 2011.50 2019.5 2018.5 2014.0
2015-05-07 09:31:00 2014.50 2022.5 2016.5 2015.0
2015-05-07 09:32:00 2012.50 2026.5 2017.5 2016.0
2015-05-08 09:30:00 2010.50 2024.5 2015.5 2017.0
2015-05-08 09:31:00 2013.50 2026.5 2017.5 2018.0
2015-05-08 09:32:00 2014.50 2028.5 2015.5 2019.0
2015-05-08 09:33:00 2014.50 2022.5 2017.5 2012.0
2015-05-11 09:30:00 2017.50 2025.5 2018.5 2013.0
2015-05-11 09:31:00 2018.50 2027.5 2019.5 2016.0
2015-05-11 09:32:00 2019.50 2024.5 2011.5 2017.0
2015-05-11 09:33:00 2020.50 2026.5 2017.5 2014.0
2015-05-12 09:30:00 2018.50 2023.5 2018.5 2018.0
2015-05-12 09:31:00 2017.50 2024.5 2017.5 2014.0
2015-05-12 09:32:00 2018.50 2023.5 2018.5 2013.0
2015-05-12 09:33:00 2017.50 2024.5 2019.5 2014.0
2015-05-12 09:34:00 2016.50 2023.5 2016.5 2012.0
2015-05-12 09:35:00 2017.50 2025.5 2018.5 2011.0
如果今天的日期是2015-05-13(周三),我需要最后3个星期的MAX(高),即2015-05-12,11,08,即2028.5。
答案 0 :(得分:3)
据推测,您只有“工作日”的数据。
select max(high)
from table_name t join
(select date
from table_name
group by date
order by date desc
limit 3
) dates
on t.date = dates.date;
据推测,您要么想要股票上的条件,要么group by
,但这取决于您的示例查询。
您可以通过添加where
子句来提高效率。通常情况下,最后三个工作日是在最后一周内,或者是:
select max(high)
from table_name t join
(select date
from table_name
where date >= date_sub(curdate(), interval 7 day)
group by date
order by date desc
limit 3
) dates
on t.date = dates.date;
答案 1 :(得分:1)
您可以在这种情况下使用date_sub函数:
select max(high) from table_name where date > date_sub(date, INTERVAL 3 DAY);
答案 2 :(得分:0)
我认为这是正确的查询:
select top 3 date, max(high) from table_name order by date desc