首页 > 解决方案 > 获取范围内的最近值 - SQL

问题描述

使用此表,我需要根据给定的 (+/-) 运行总计获取 DATE 值。

+----+------------+---------+---------------+
| ID |    DATE    | AMOUNT  | RUNNING TOTAL |
+----+------------+---------+---------------+
| 20 | 2020-04-24 | 2941.18 | 2,941.18       |
| 21 | 2020-05-01 | 2941.18 | 5,882.36       |
| 22 | 2020-05-08 | 2941.18 | 8,823.54       |
| 23 | 2020-05-15 | 2941.18 | 11,764.72      |
| 24 | 2020-05-22 | 2941.18 | 14,705.90      |
| 25 | 2020-05-29 | 2941.18 | 17,647.08      |
+----+------------+---------+---------------+

如果运行总计的给定值与表中显示的值完全相同,则很容易。如果给定的运行总数为5, 882.36,则结果为2020-05-01;如果给定的运行总数为14, 75.90,则结果为2020-05-22;等等。

但是,给定的数字与表中存储的数字并不完全相同。例如,

给定的 Running Total 是 8, 600,结果应该是2020-05-08;对于14, 000,结果应该是2020-05-22

我试过这个查询

SELECT TOP 1 DATE FROM Table ORDER BY abs([RunningTotal] - '14000')

它几乎可以正常工作,但是如果给定的 Running Total 是14,706或者说15,000,则结果为2020-05-22而不是2020-05-29。所需的结果是2020-05-29,因为它在记录 ID #25 的运行总数内。

标签: sqlsql-serverselect

解决方案


您可以使用过滤和order by

select top (1) t.*
from t 
where running_total >= @running_total
order by running_total desc

推荐阅读