【发布时间】:2013-10-07 05:26:17
【问题描述】:
我一直在为一个具有以下表格结构的项目工作
开始 |结束 |速度 ------------------ 1 | 50 | 10 51 | 100 | 20 101 | 150 | 40 151 | 200 | 80 201 | 0 |100这里最后一条记录表示 200 到无限值的比率为 100
这里我必须根据用户给出的开始和结束值来计算总费率
我在 mysql 中尝试了以下查询,输入 start - 30, end - 170
SELECT SUM((end+1 - start) * amount)
FROM table
WHERE start > 30
AND end < 170
只给出第二个 和第三条记录值相加,那么我必须分别查询第一条和最后一条记录。
如何在单个查询中实现这一点?
【问题讨论】:
-
我的理解正确吗,随着起点的上升,利率也会上升,所以如果你从 30 开始到 170,那么数学将是
(20*10)+(49*20)+(49*40)+(19*80)? -
请分享实际计算费率的公式...
-
你是对的,但稍加修正,数学将是
(20*10)+(50*20)+(50*40)+(20*80)前>
-
根据您的距离计算方式,您可能希望移动到专属上限。这是因为有 50 到 51 之间的值 - 请参阅 this blog post 以获取与时间戳相关的示例。在具有递归 CTEs/a
ROW_NUMBER()函数的 RDBMS 中,我只存储范围的 start,并将此表组装为视图。