2016-04-12 39 views
-2

我有一张表格,其中包含客户余额,我需要能够查看帐户数据何时以每个帐户上一个月的余额下降一定的百分比。在选择结果行上执行数学运算

我的输出包含帐户ID,year_month组合代码和月末余额。所以我想看看二月份的余额是否比一月份下降了X%,如果一月份的下降幅度与十二月份相同。如果确实下降了,那么我希望能够看到它所投下的年份代码,并且是的,我可以拥有多个账户,并且我希望看到这一点。

任何人都有关于如何在SQL中执行此操作的想法?

编辑:添加一些示例数据按要求。在桌面上,我正在查看以year_month作为列,但我确实有权获得每月的最后一个营业日日期以及

account_id | year_month |期末余额

1 | 2016-1 | 50000

1 | 2016-2 | 40000

1 | 2016-3 | 25

我希望看到的输出是年底月份的代码,当期末余额至少比上个月减少50%时。

+0

您正在使用哪种RDBMS? – Quassnoi

+0

我们正在使用SQL服务器 – danl

+0

可否请您发布一些示例数据和期望的输出? – Quassnoi

回答

0

首先,我会建议为此计算制作Year_Month yyyy-mm-dd格式日期。然后拿走当前表并将其加入自己,但您加入的日期将是上个月。然后在select中执行你的计算。所以你可以做下面这样的事情。

SELECT x.*, 
     x.EndingBalance - y.EndingBalance 
FROM Balances x 
INNER JOIN Balances y ON x.AccountID = y.AccountID 
        and x.YearMonth = DATEADD(month, DATEDIFF(month, 0, x.YearMonth) - 1, 0) 
+0

谢谢您的回复。这种方法会在随后的几个月内自动提取,还是需要每个月加入一次,以便我及时回顾一下? – danl

+0

它会拉起所有月份。如果您一路走到历史的开始处,您可能需要将其更改为“左连接”,以便不排除第一个月,因为在第一个月之前不会有一个月加入。 –