【发布时间】:2020-05-19 16:03:34
【问题描述】:
使用此表,我需要根据给定的 (+/-) 运行总计获取 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 的运行总计内。
【问题讨论】:
-
我不明白你的情况:8、600,结果应该是2020-05-08; 14, 000,?为什么?它不应该是最近的更大吗?在这种情况下:2020-05-15
-
首先,去掉14000的引号。
-
只需过滤以确保差异不是负数。
where running total - 14000 >= 0。然后你也不需要绝对值。事实上,您可以通过总计进行排序。 -
如果您需要最近更大的,使用
ABS()和区别也是没有意义的。只需按总数计算前 1 个订单,它大于运行总数。 -
同意。
where running total >= 14000是一回事。
标签: sql sql-server select