如何从表中获取最近3周的最后3个数据

时间:2015-05-15 14:22:25

标签: mysql sql date max

我有一张由股市每日数据组成的表格。它每天由不同数量的行组成。我在表中有一个名为“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。

3 个答案:

答案 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