Mysql 构建查询';每月平均金额';填补上个月的空缺

Mysql 构建查询';每月平均金额';填补上个月的空缺,mysql,sql,Mysql,Sql,我有个问题。我需要构建报表查询,以按月计算平均金额。 如果帐户中的用户在这个月没有购买任何东西,我应该使用上个月的金额 这是我的数据:正如你所见,我在7月(2014-07)有一个账户操作,在8月(2014-08)有一个账户操作 我已经建立了一个查询。它可以得到每个月的平均值 SELECT data_channel_id, test2.monthaa, AVG(h1.amount) as amount FROM value_hist h1 JOIN (

我有个问题。我需要构建报表查询,以按月计算平均金额。 如果帐户中的用户在这个月没有购买任何东西,我应该使用上个月的
金额

这是我的数据:正如你所见,我在7月(2014-07)有一个账户操作,在8月(2014-08)有一个账户操作

我已经建立了一个查询。它可以得到每个月的平均值

SELECT 
    data_channel_id,
    test2.monthaa,
    AVG(h1.amount) as amount
FROM
    value_hist h1
    JOIN (
     SELECT  MAX(dd.`id`) as id, EXTRACT(month from dd.created_at) as monthaa
     FROM value_hist dd 
     where dd.created_at > '01.01.2014' 
     GROUP BY  data_channel_id,  dd.account_id, monthaa
    ) test2 ON test2.id =  h1.id
WHERE
    created_at > '01.01.2014'
GROUP BY data_channel_id, monthaa
| channel | month | amount |
| 2       | 7     | 50.0000|
| 2       | 8     | 100.000|
| 2       | 9     | 8.25000|
结果返回每个月的平均值

SELECT 
    data_channel_id,
    test2.monthaa,
    AVG(h1.amount) as amount
FROM
    value_hist h1
    JOIN (
     SELECT  MAX(dd.`id`) as id, EXTRACT(month from dd.created_at) as monthaa
     FROM value_hist dd 
     where dd.created_at > '01.01.2014' 
     GROUP BY  data_channel_id,  dd.account_id, monthaa
    ) test2 ON test2.id =  h1.id
WHERE
    created_at > '01.01.2014'
GROUP BY data_channel_id, monthaa
| channel | month | amount |
| 2       | 7     | 50.0000|
| 2       | 8     | 100.000|
| 2       | 9     | 8.25000|
<>但是我应该得到这个结果,我应该考虑上个月<代码>金额< /代码>。例如(100+50)/2,因为账户1在2014-08年8月没有购买

更新:7月(7日)只有一个账户,因此金额等于50.00;(50.00 / 1 = 50.00).
8月(8日),第二个账户的金额等于75.00;((100.00+50)/2=75.00),因为我在8月份有两个账户。

为什么第7个月是50而不是12.5?数据中有四个人。据我所知,这令人困惑,您最初的查询是每个帐户id的每月最后插入交易金额的平均值。这是否正确?你在问题中没有提到这种复杂性。。我猜,如果某个特定用户一个月内没有交易,您可能希望使用上个月插入的最后一笔金额。按照这个逻辑,我期望(0,0,0,50)/4=12.5,(0,0,50100)/4=37.5,8.25,但我无法想象你为什么要计算这样的平均值!啊,算了,状态是交易结束时的余额。。每个用户的第一笔交易代表开户。第一个月只有一个账户,第二个月有两个,第三个月有四个。您需要每个现有帐户在月底的平均余额。对吗?2:因为7个月内只有一个账户。第二个帐户是在8个月内添加的。2是的,你是对的。现有账户每月(7-一个账户、8-两个账户等)