我得到了以下两个表的数据,需要计算2016年12月、2017年12月和2018年12月每个账户的索引LTV,并且不确定如何执行。解决方案需要一个SQL脚本。任何想法都非常感谢!
索引表:
数据表:
抵押贷款account
发布于 2021-01-23 14:26:40
这里有一个想法,虽然很简单,但你可以计算它。我假设每个月和每个感兴趣的领域都有索引数据,因此不需要“模糊匹配”。例如TSQL / MS SQL Server。
因此,使用与您的两个关键表相同的模型,设置一些示例数据.
CREATE TABLE #DataTable
(MortgageNo VARCHAR(15),
PropertyArea VARCHAR(50),
ValuationDate DATETIME,
PropertyValuation DECIMAL(12, 2),
BalanceDecember2016 DECIMAL(12, 2),
BalanceDecember2017 DECIMAL(12, 2),
BalanceDecember2018 DECIMAL(12, 2))
INSERT INTO #DataTable
VALUES
('MORTGAGE001', 'KENT', '01-Jan-2015', 300000, 250000, 230000, 220000),
('MORTGAGE002', 'LONDON', '01-Jan-2016', 500000, 450000, 430000, 420000)
CREATE TABLE #IndexTable
(IndexArea VARCHAR(50),
IndexMonth CHAR(6),
Movement DECIMAL(7, 4))
INSERT INTO #IndexTable
VALUES
('KENT', '201501', 1.05), -- 105%
('KENT', '201612', 1.10), -- 110%
('KENT', '201712', 1.15),
('KENT', '201812', 1.10),
('LONDON', '201601', 1.15),
('LONDON', '201612', 1.15),
('LONDON', '201712', 1.25),
('LONDON', '201812', 1.30)现在,将数据转到轴点,这样就不用为3个不同的平衡日期列出3列了,我们有3行,每个行都有一个平衡日期和一个余额。
CREATE TABLE #BalanceDates (BalanceDate DATE)
INSERT INTO #BalanceDates
VALUES ('2016-12-01'),('2017-12-01'),('2018-12-01')
SELECT
MortgageNo,
PropertyArea,
ValuationDate,
PropertyValuation,
balanceDates.BalanceDate,
CASE balanceDates.BalanceDate
WHEN '2016-12-01' THEN BalanceDecember2016
WHEN '2017-12-01' THEN BalanceDecember2017
WHEN '2018-12-01' THEN BalanceDecember2018
END AS Balance
INTO
#BalancePivoted
FROM
#DataTable mortgageData,
#BalanceDates balanceDates现在,计算。两个连接到索引数据-一个在最初的资产评估日期,以获得在属性评估日期的指数级别。第二,在平衡日期获取索引级别。在估价时计算房价指数相对于平衡日的百分比差额,并调整房地产估价:
balance.PropertyValuation * (indexBalance.Movement / indexAtValuation.Movement)
例如,如果估值指数为1 (100%),平衡日指数为1.1 (110%),则原来的10万美元估值调整为11万。
然后,您可以使用调整后的估值与余额,以计算贷款与价值的比率,并希望这可以作为一个指数的LTV数字。
balance.Balance / (balance.PropertyValuation * (1.0 + indexBalance.Movement - indexAtValuation.Movement)) AS IndexedLTV
SELECT
balance.*,
indexAtValuation.Movement AS IndexAtValuationDate,
indexBalance.Movement AS IndexAtBalanceDate,
indexBalance.Movement - indexAtValuation.Movement AS IndexPercentChange,
balance.PropertyValuation * (indexBalance.Movement / indexAtValuation.Movement) AS AdjustedValuation,
balance.Balance / (balance.PropertyValuation * (1.0 + indexBalance.Movement - indexAtValuation.Movement)) AS IndexedLTV
FROM
#BalancePivoted balance
JOIN
#IndexTable indexAtValuation
ON
DATEADD(MONTH, DATEDIFF(MONTH, 0, balance.ValuationDate), 0) = CONVERT(date, indexAtValuation.IndexMonth + '01')
AND
balance.PropertyArea = indexAtValuation.IndexArea
JOIN
#IndexTable indexBalance
ON
balance.BalanceDate = CONVERT(date, indexBalance.IndexMonth + '01')
AND
balance.PropertyArea = indexBalance.IndexAreahttps://stackoverflow.com/questions/65859622
复制相似问题