繁体   English   中英

SQL 计算最近7天支付的平均金额

[英]SQL to calculate the average amount paid in the last 7 days

我有一个访问了 2 列的表和支付的金额

visited         amount paid
-------------------------
2018-04-01      100
2018-04-02      200
2018-04-03      300

我想获得过去 7 天(今天和过去 6 天)支付的平均金额以及结果中的访问和支付金额:

Output:

visited         amount      average of last 7 days
---------------------------------------------------
2018-04-01      100         100
2018-04-02      200         150
2018-04-03      300         200

解释:

Row 1 : average amount = 100/1 = 100
Row 2 : average amount = (100 + 200)/2 = 150
Row 3 : average amount = (100 + 200 + 300)/3 = 200 

我正在尝试使用 MySQL 或 Oracle 数据库,一切都很好。

您需要在 MySQL 5.x 中使用相关子查询:

SELECT visited, amount_paid, (
    SELECT AVG(amount_paid)
    FROM t AS x
    WHERE x.visited >= t.visited - INTERVAL 6 DAY
    AND   x.visited <= t.visited
) AS 7_day_avg
FROM t

在 MySQL 8 和 Oracle 中,您可以使用 window 函数。

对于带有AVG()分析 function 的 Oracle:

select t.*, avg(t."amount paid") over (order by t."visited") as "average of last 7 days"
from tablename t
where t."visited" >= to_date('08-11-2019', 'dd-MM-yyyy') - 7
and t."visited" <= to_date('08-11-2019', 'dd-MM-yyyy')

请参阅演示

如果我理解正确,您需要累积运行平均值。 如果是这样,您可以使用 window 函数:

select t.*
       avg(amount_paid) over (order by visited
                              range between interval '6' day preceding and current row
                             )
from t;

Oracle 和 MySQL 8+ 都支持这种语法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM