我有一个纵向表格,其中包括日期和余额。我需要提取6个变量,其中包含过去6个月中每一个的余额。这看起来好像应该非常容易,但到目前为止我没有运气使用case或if语句中的select。
我的整个程序按日期循环访问我的数据。
使用看起来像这样的表:
col1 |col2 |account |date |balance |col3 |col4
--------------------------------------------------------------
| |123456 |Jul-16 |1200 | |
| |123456 |Jun-16 |1100 | |
| |123456 |May-16 |1000 | |
| |123456 |Apr-16 |900 | |
| |123456 |Mar-16 |800 | |
| |123456 |Feb-16 |700 | |
| |123456 |Jan-16 |600 | |
| |123456 |Dec-15 |500 | |
| |123456 |Nov-15 |400 | |
| |123456 |Oct-15 |300 | |
| |123456 |Sep-15 |200 | |
| |123456 |Aug-15 |100 | |
| |234567 |Jul-16 |-500 | |
| |234567 |Jun-16 |-400 | |
| |234567 |May-16 |-600 | |
| |234567 |Apr-16 |-500 | |
| |234567 |Mar-16 |-200 | |
| |234567 |Feb-16 |-400 | |
| |345678 |Jul-16 |100 | |
| |345678 |Jun-16 |200 | |
| |345678 |May-16 |300 | |
| |345678 |Apr-16 |400 | |
| |345678 |Mar-16 |500 | |
我会要求变量b1-b6在过去6个月内为每个帐户提供余额。
答案 0 :(得分:1)
很难判断这是否正是您正在寻找的,但如果您正在寻找6个月内每个帐户累积的余额,以下内容可能有所帮助。
SELECT account, SUM(balance)
FROM Table_1
WHERE date >= '2013-02-02' AND
date <= '2013-08-02'
GROUP BY account
&#39; GROUP BY&#39;函数将汇总汇总变量或SUM(balance)
每个帐户&#39;而where子句将返回日期范围的聚合值。您可以将其他变量添加到select语句和&#39; GROUP BY&#39;。
答案 1 :(得分:1)
虽然这基本上是每组前N个问题,但看起来你每个月都会持续获得数据,这样可以更容易处理。
select t.*
from
<T> t inner join
(select account, max(date) as max_date from <T> group by account) m
on m.account = t.account and t.date > max_date - 6 months /* pseudo-code */
您必须根据业务规则计算六个月的回顾。可能还有一些小的并发症,月末接近月份(尤其是2月份)。这只是一种粗略的模板,可能可能在您的平台上运行。根据您可以做出的假设,有可能对此进行优化。