繁体   English   中英

DB2 for IBM i(AS400)-SQL

[英]DB2 for IBM i (AS400) - SQL

两个表A(每日贷款交易表)和B(每日eod贷款余额表)。

尝试在DB2 AS400中编写一条select语句以显示所选日期范围内的每日贷款交易,eod贷款余额和期初贷款余额(前一天)。

下面的查询将给我每日贷款交易和eod贷款余额。 但在修改以下查询时也需要一些帮助,以针对所选的日期范围2015年3月1日至2015年3月31日计算初始贷款余额(截至2015年2月28日的余额)。

select A.*, -- daily loan transactions
       B.EOD_Loan_Balance
from A 
  inner join B 
   on A.date_id = B.date_id 
    and A.Loan_num = B.Loan_num
where a.date_id between 03/01/2015 to 03/31/2015

请注意,前一天应该是工作日,因此,如果2015年2月28日不是工作日,那么我们需要提取当天之前的eod余额,并且应该是一个工作日。

任何想法将不胜感激。

谢谢!

这对您有用吗?

select A.*, -- daily loan transactions
       B.EOD_Loan_Balance,
       C.EOD_Loan_Balance,
from A 
  inner join B 
   on A.date_id = B.date_id 
    and A.Loan_num = B.Loan_num
  LEFT OUTER join C
   on A.Loan_num = C.Loan_num
where a.date_id between '2015-03-01' to '2015-03-31'
and c.date_id = CASE 
                  WHEN DAYOFWEEK('2015-03-01') = 1 THEN '2015-03-01' - 2 days 'Sunday --> Friday
                  WHEN DAYOFWEEK('2015-03-01') = 2 THEN '2015-03-01' - 3 days 'Monday --> Friday
                  ELSE                                  '2015-03-01' - 1 day ' Previous day
                END

未经测试,因为我没有方便的DB2实例。

编辑进行了修改,以允许在评论中提到周末。

这是使用“日历”或“日期”表可以轻松完成的众多任务之一。

select D.*,
       B.EOD_Loan_Balance,
       E.EOD_Loan_Balance,
from MY_CALENDAR_TABLE C
     join daily_trans D on c.date = d.date 
     join eod_bal B on c.date - 1 day= b.date and d.loan_num = b.loan_num
     join eod_bal E on c.date = e.date and d.loan_num = e.loan_num
where c.date between 2015-03-01 and 2015-03-31
  and c.is_business_day = 1;

- 编辑 -
回顾这一点,我意识到它并不起作用。 从开始的平衡加入不会给您前一天的业务

幸运的是,日历表的灵活性可以解救。 只需在日历表中添加PRIOR_BUSINESS_DAY列即可。

然后,SQL变为:

select D.*,
       B.EOD_Loan_Balance,
       E.EOD_Loan_Balance,
from MY_CALENDAR_TABLE C
     join daily_trans D on c.date = d.date
     join eod_bal B on c.prior_buisiness_day = b.date 
           and d.loan_num = b.loan_num
     join eod_bal E on c.date = e.date
           and d.loan_num = e.loan_num
where c.date between 2015-03-01 and 2015-03-31
  and c.is_business_day = 1;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM