[英]SQL Query / Stored proc to count monthly average of daily sums
我正在使用Firebird 2.1。
我可以使用一些帮助来创建以下查询或存储过程。
我需要列出小额现金交易每日总金额的每月平均值。
让我解释:
表格PettyCash(RowID,TDate,InOut,Amount)
如果是外向,则InOut = 0,如果是外向事务,则InOut = 1
该查询要做的是计算该月每一天的余额,将其总计,然后除以当月的天数。
如果在指定的日期没有交易,则余额保持不变。
因此,在一月份,它是这样的:
等等。
使事情复杂化的是,总是从上一年开始存入期初余额(加起来就是今年的余额)。
我这样计算:
SELECT SUM(IIF(INOUT = 0, AMOUNT, -AMOUNT))
FROM PETTYCASH
WHERE TDATE < '2012-01-01';
结果查询或存储的proc应该提供开始日期和结束日期-开始日期始终是一年中的第一天,结束日期可以是一年中的给定日期,即:StartDate = 2012-01- 01,EndDate = 2012-06-23
如果EndDate不是一个月的最后一天,则最后一个月的平均值应仅除以最后一天,在示例6月应除以23而不是30。
结果应该是这样的: 该月每日总金额的平均值
任何帮助将不胜感激!
谢谢
您需要的是一个子查询。 内部子查询计算每天的总和,外部子查询计算平均值。
我不熟悉firebird的date函数,但它确实具有“提取”功能。 下面使用它来获取您想要的:
select yr, mon, avg(amt)
from (SELECT extract(year from tdate) as yr, extract(month from tdate) as mon,
extract(day from tdate) as day,
SUM(IIF(INOUT = 0, AMOUNT, -AMOUNT)) as amt
FROM PETTYCASH
WHERE TDATE < '2012-01-01'
group by extract(year from tdate), extract(month from tdate),
extract(day from tdate)
) t
group by yr, mon
order by yr, mon
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.