【问题标题】:How to get last 3 data of last 3 week days from a table如何从表中获取最近 3 周的最后 3 个数据
【发布时间】:2015-05-15 14:22:25
【问题描述】:

我有一张包含股市每日数据的表格。它由每天的不同行数组成。我在表中有一个名为“高”的列。现在我需要计算过去 3 周的 MAX(High)。例如:- 如果今天是星期三,我需要计算上周星期五和本周星期一、星期二的 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 年 5 月 13 日(星期三),我需要最后 3 个工作日的 MAX(高),即 2015 年 5 月 5 日 12,11,08,即 2028.5。

【问题讨论】:

  • 这是一个非常好的问题。我认为可以通过一些示例数据和您的预期结果对其进行一些改进,以便其他人可以准确地看到您要查找的内容。
  • 打开和关闭是关键字,你应该改变列名
  • ^日期和时间也是如此,把它扔进去。
  • 创建一个 sql fiddle,我将向您展示如何使用 php 完成此操作
  • 另外,我有点困惑。如果这一天是星期三,您不想要星期五、星期一和星期二吗?

标签: mysql sql date max


【解决方案1】:

大概你只有“工作日”的数据。

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;

【讨论】:

  • 我理解他的问题是问如何在 PHP 中做到这一点?
【解决方案2】:

在这种情况下,您可以使用 date_sub 函数:

select max(high) from table_name where date > date_sub(date, INTERVAL 3 DAY);

【讨论】:

    【解决方案3】:

    我认为这是正确的查询:

    select top 3 date, max(high) from table_name order by date desc
    

    【讨论】:

      猜你喜欢
      • 2016-03-20
      • 2014-03-21
      • 2019-10-28
      • 1970-01-01
      • 2012-08-18
      • 2019-10-11
      • 2016-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多