sql - 获取范围内的最近值 - 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 的运行总数内。
解决方案
您可以使用过滤和order by
:
select top (1) t.*
from t
where running_total >= @running_total
order by running_total desc
推荐阅读
- javascript - react native 将自定义组件放在页面正文组件上
- javascript - 如何使用 Ajax 将过滤后的数据发送回 PHP 文件?
- vuetify.js - 使用 vuetify 自动完成选择后清除搜索框
- asp.net-mvc - RazorEngine.Text.RawString 不适用于常规 MVC 局部视图
- shell - 使用powershell获取csv文件中的特定单元格值
- sql - 从任何地方访问 Azure Sql 服务器/VSTS 管道
- firebase - firebase 功能 - `firebase deploy` - 该服务当前不可用
- arrays - Angular 6:如何将 JSON 字符串添加到现有的 JSON 字符串数组?
- java - 为什么我的插入排序比合并排序快?
- c++ - 交叉编译时包含外部库