【问题标题】:SQL Find the average of 3 day closestSQL 查找最接近 3 天的平均值
【发布时间】:2021-06-18 18:54:17
【问题描述】:

我有一个这样的 SQL 结构:

Create Table Transactions (
Id integer primary key not null auto_increment,
ResourceId varchar(255),
Price Integer,
TransactionTime date
);

我想获取时间 (TransactionTime) 以及 3 天的平均价格。例如,22 日的 3 天平均值将是 20 日、21 日和 22 日的平均值。 非常感谢。

【问题讨论】:

  • 例如,22 日的 3 天平均值将是 20 日、21 日和 22 日的平均值。 这看起来不像“最接近”,而是像“最接近但不在上面”。请澄清。
  • 指定精确 MySQL版本。
  • 嗨@Akina,这意味着20日的平均价格将是22日至20日的平均价格。
  • 为什么不从 19 日到 21 日?
  • TransactionTime 未定义为唯一,因此您可能在此列中存在重复项...当存在此类重复项时,您需要获取什么?

标签: mysql sql


【解决方案1】:

您大概需要每一行和给定资源的这些信息。如果是这样:

select t.*,
       avg(price) over (partition by resourceid
                        order by transactiontime
                        range between interval 2 day preceding and current row
                       ) as avg_3
from transactions t;

【讨论】:

    【解决方案2】:

    对于 SQL 服务器:

    SELECT AVG(Price), MAX(TransactionTime) FROM Transactions GROUP BY FLOOR(DATEDIFF(DAY, GETDATE(), TransactionTime) / 3);
    

    【讨论】:

    • Mysql没有getdate函数
    • @P.Salmon 然后使用 CURDATE()。
    猜你喜欢
    • 1970-01-01
    • 2014-03-31
    • 2021-07-01
    • 2022-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    相关资源
    最近更新 更多