Sql server 如何将特定值与指定的整数范围相匹配?
我有存储贷款计划的表,请注意,我只从计划表中提取了1个id 表:时间表Sql server 如何将特定值与指定的整数范围相匹配?,sql-server,Sql Server,我有存储贷款计划的表,请注意,我只从计划表中提取了1个id 表:时间表 +-------------+-------------+-----------+ |ID | Date | Amount | +-------------+-------------+-----------+ | H 1807.0030 | 2020-10-25 | 338850.00 | | H 1807.0030 | 2020-11-25 | 301200.00 | | H
+-------------+-------------+-----------+
|ID | Date | Amount |
+-------------+-------------+-----------+
| H 1807.0030 | 2020-10-25 | 338850.00 |
| H 1807.0030 | 2020-11-25 | 301200.00 |
| H 1807.0030 | 2020-12-25 | 263550.00 |
| H 1807.0030 | 2021-01-25 | 225900.00 |
| H 1807.0030 | 2021-02-25 | 188250.00 | > Compare2
| H 1807.0030 | 2021-03-25 | 150600.00 | > Compare1
| H 1807.0030 | 2021-04-25 | 112950.00 | > Compare3
| H 1807.0030 | 2021-05-25 | 75300.00 |
| H 1807.0030 | 2021-06-25 | 37650.00 |
+-------------+-------------+-----------+
我想要这样的东西:
匹配1:
如果余额=附表。应返回日期“2021-03-25”的金额
比赛2:
如果余额>计划金额且小于比较2,则仍应返回日期“2021-03-25”
比赛3:
如果余额<附表金额且大于比较3,则应返回日期“2021-04-255”
我所尝试的:
OUTER APPLY (
SELECT TOP(1) LoanId, DatePayment,InterestBalance, TotalBalance
FROM LoanSchedules where LoanID = loans.LoanID
AND TotalBalance = scheduleofaccountscurrentlr.Balance --##Comparison
ORDER BY DatePayment DESC
) tmpschedintbal
但它只返回两个匹配金额的日期。有没有这样做的建议?谢谢。如果我理解正确,您希望选择与等于或小于给定
余额的金额相对应的日期。如果未找到相等的金额
,则必须选择余额
下方最接近的金额
样本数据
create table Schedule
(
ID nvarchar(11),
Date date,
Amount money
);
insert into Schedule (ID, Date, Amount) values
('H 1807.0030', '2020-10-25', 338850.00),
('H 1807.0030', '2020-11-25', 301200.00),
('H 1807.0030', '2020-12-25', 263550.00),
('H 1807.0030', '2021-01-25', 225900.00),
('H 1807.0030', '2021-02-25', 188250.00),
('H 1807.0030', '2021-03-25', 150600.00),
('H 1807.0030', '2021-04-25', 112950.00),
('H 1807.0030', '2021-05-25', 75300.00 ),
('H 1807.0030', '2021-06-25', 37650.00 );
create table Ledger
(
Example int,
ID nvarchar(11),
Balance money
);
insert into Ledger (Example, ID, Balance) values
(1, 'H 1807.0030', 150600.00), -- expect 2021-03-25
(2, 'H 1807.0030', 150800.00), -- expect 2021-03-25
(3, 'H 1807.0030', 113950.00); -- expect 2021-04-25
解决方案
select l.Example,
l.ID,
l.Balance,
x.Date
from Ledger l
cross apply ( select top 1 s.Date
from Schedule s
where s.ID = l.ID
and s.Amount-l.Balance <= 0
order by s.Amount-l.Balance desc ) x
order by l.Example;
您希望最终结果是什么?@vv4d我的问题中包含了一个匹配样本。如果明细表中存在余额,余额表上是否有datetime
或date
列?你能提供另一张表的结构吗。您共享了一个明细表的完整定义和另一个明细表的最小详细信息。@vvv4d仅共享金额。您如何知道哪一行是Compare1与Compare2 verus Compare3?它们不是按顺序排列的,依次是2,1,3。你能描述一下这种逻辑吗?
OUTER APPLY (
SELECT TOP(1) LoanId, DatePayment,InterestBalance, TotalBalance
FROM LoanSchedules where LoanID = loans.LoanID
AND TotalBalance = scheduleofaccountscurrentlr.Balance --##Comparison
ORDER BY DatePayment DESC
) tmpschedintbal
create table Schedule
(
ID nvarchar(11),
Date date,
Amount money
);
insert into Schedule (ID, Date, Amount) values
('H 1807.0030', '2020-10-25', 338850.00),
('H 1807.0030', '2020-11-25', 301200.00),
('H 1807.0030', '2020-12-25', 263550.00),
('H 1807.0030', '2021-01-25', 225900.00),
('H 1807.0030', '2021-02-25', 188250.00),
('H 1807.0030', '2021-03-25', 150600.00),
('H 1807.0030', '2021-04-25', 112950.00),
('H 1807.0030', '2021-05-25', 75300.00 ),
('H 1807.0030', '2021-06-25', 37650.00 );
create table Ledger
(
Example int,
ID nvarchar(11),
Balance money
);
insert into Ledger (Example, ID, Balance) values
(1, 'H 1807.0030', 150600.00), -- expect 2021-03-25
(2, 'H 1807.0030', 150800.00), -- expect 2021-03-25
(3, 'H 1807.0030', 113950.00); -- expect 2021-04-25
select l.Example,
l.ID,
l.Balance,
x.Date
from Ledger l
cross apply ( select top 1 s.Date
from Schedule s
where s.ID = l.ID
and s.Amount-l.Balance <= 0
order by s.Amount-l.Balance desc ) x
order by l.Example;
Example ID Balance Date
-------- ------------ ------------ -----------
1 H 1807.0030 150600.0000 2021-03-25
2 H 1807.0030 150800.0000 2021-03-25
3 H 1807.0030 113950.0000 2021-04-25