【问题标题】:SQL- How to find average of a column using values only in last N rowsSQL-如何仅使用最后 N 行中的值查找列的平均值
【发布时间】:2015-05-20 11:38:53
【问题描述】:

我有一个如下所示的数据表。

datestamp   timestamp   vix    
2015-05-13   16:30:00   18.0     
2015-05-14   16:30:00   19.2
2015-05-15   16:30:00   18.5
2015-05-18   16:30:00   17.5
2015-05-19   16:30:00   17.0

我想获得过去 3 天 vix 列的平均值(avg())。我知道如何使用这样的查询获取最后 3 行

select vix from my_table order by date desc limit 3

如何进一步计算过去 3 天的平均值?任何帮助,将不胜感激。

【问题讨论】:

  • 将日期和时间存储为单个实体
  • @strawberry 感谢您的建议
  • arth 的反应比 jarlh 好很多。使用派生表进行简单查询远非最佳。

标签: mysql sql average


【解决方案1】:

使用派生表:

select avg(dt.vix)
from
(select vix from my_table order by date desc limit 3) dt

【讨论】:

    【解决方案2】:

    这取决于您想要最近 3 天还是最近 3 条记录。

    仅限最后三天:

    SELECT AVG(t.vix)
      FROM table t
     WHERE t.datestamp > CURDATE() - INTERVAL 3 DAY
    

    更可取,否则请使用 Jarlh 的答案

    【讨论】:

    • 谢谢,有道理
    猜你喜欢
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 2022-10-26
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    相关资源
    最近更新 更多