【发布时间】:2012-06-25 13:30:25
【问题描述】:
我使用的是 Firebird 2.1。
我可以使用一些帮助来创建以下查询或存储过程。
我需要列出每日零用现金交易总额的月平均值。
让我解释一下:
TABLE PettyCash(RowID, TDate, InOut, Amount)
- 1 2012-01-01 0 5.000
- 2 2012-01-01 1 3.000
- 3 2012-01-05 0 4.000
- 4 2012-01-23 1 2.000
- 5 2012-02-20 1 5.000
如果是传入事务,则 InOut = 0,如果是传出事务,则 InOut = 1
查询要做的是计算当月每一天的余额,将金额相加,然后除以当月的天数。
如果某一天没有交易,余额保持不变。
所以在一月份是这样的:
- 2012-01-01 2.000
- 2012-01-02 2.000
- 2012-01-03 2.000
- ...
- 2012-01-05 6.000
等等。
为了使事情复杂化,总是有一个从去年开始的余额(加起来就是今年的余额)。
我是这样计算的:
SELECT SUM(IIF(INOUT = 0, AMOUNT, -AMOUNT))
FROM PETTYCASH
WHERE TDATE < '2012-01-01';
应为生成的查询或存储过程指定开始日期和结束日期 - 开始日期始终是一年的第一天,结束日期可以是一年中的给定日期,即:StartDate = 2012 -01-01,结束日期 = 2012-06-23
如果 EndDate 不是一个月的最后一天,则最后一个月的平均值应仅除以最后一天,在示例中,六月应除以 23 而不是 30。
结果应该是这样的: 月 |本月每日平均金额
任何帮助将不胜感激!
谢谢
【问题讨论】:
标签: sql query-optimization firebird firebird2.1