如何使用ms access计算平均数量?

x6492ojm  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(304)

表名为salary(id(autonumber)、employee\u id(number)、effective\u from(date)、amount(number))
如果初始薪资已更新,则表中存储一条记录。
所以,如果一个人的薪水是1000,从4月份开始增加到1500。
然后,该员工的表值为:

effective_from  Amount
1/1/2020        1000
1/4/2020        1500

是否可以通过sql获得给定日期范围内的平均工资?
e、 g从2020年1月1日到2020年12月31日,平均工资应为((10003)+(15009))/12

zsbz8rwp

zsbz8rwp1#

此查询将使用系统表生成每个月的薪资:

PARAMETERS 
    [DateStart] DateTime, 
    [DateEnd] DateTime;
SELECT 
    Salary.employee_id, 
    Dozen.N AS Id, 
    DateAdd("m",[Dozen].[N],[DateStart]) AS DateMonth, 
    Salary.amount
FROM 
    (SELECT DISTINCT Abs([id] Mod 12) AS N FROM MSysObjects) AS Dozen, 
    Salary
WHERE 
    ((Dozen.N) <= DateDiff("m",[DateStart],[DateEnd])) 
    AND 
    ((Salary.effective_from) = 
        (Select Top 1 T.effective_from 
        From Salary As T 
        Where 
            T.employee_id = [Salary].[employee_id] 
            And 
            T.effective_from <= DateAdd("m",[Dozen].[N],[DateStart]) 
        Order By 1 Desc)))
ORDER BY 
    Salary.employee_id, 
    DateAdd("m",[Dozen].[N],[DateStart]);

输出:

现在,将此查询用作聚合查询计算平均金额的源,如:

SELECT 
    Salaries.employee_id, 
    Avg(Salaries.amount) AS AverageAmount
FROM 
    Salaries
GROUP BY 
    Salaries.employee_id;
slmsl1lt

slmsl1lt2#

在ms access中,您需要一个日历表。对于这样的表,可以使用如下查询:

select avg(amount)
from (select c.*,
             (select top 1 t.amount
              from [table] as t
              where t.effective_from <= c.date and
                    t.employee_id = @employee_id
              order by t.effective_from desc
             ) as amount
      from calendar as c
      where c.date >= @date1 and c.date <= @date2
     ) c

相关问题