查询以查找最接近的数字并返回SQL Server中的相关折扣

时间:2016-08-29 22:08:43

标签: sql-server

具体情况如下:

Monthly_Budget | Extra_Bonus
---------------------------
300,000,000    |   0.40
420,000,000    |   0.60
580,000,000    |   0.90
1,000,000,000  |   1.20
1,600,000,000  |   1.45
2,900,000,000  |   1.55
4,160,000,000  |   1.65
6,600,000,000  |   1.80
10,000,000,000 |   2.10
14,160,000,000 |   2.25
20,000,000,000 |   2.60
26,000,000,000 |   3.00
33,000,000,000 |   3.40
50,000,000,000 |   4.00
73,000,000,000 |   4.50

第一列显示预算,第二列显示相关奖金。 例如,如果预算 300,000,000 350,000,000 410,000,000 (任何低于下一记录),奖金将 0.40 (之前的记录)。 我的问题是如何查询这个确切的给定示例?

    SELECT  Extra Bonus
    FROM    Monthly_Budget_TBL
    WHERE   Monthly_Budget .....?

由于

3 个答案:

答案 0 :(得分:0)

 declare @actualBudget integer = 350000000
-- --------------------------------
 Select Extra_Bonus from table
 Where Monthly_Budget =
    (Select Max(Monthly_Budget) from table
     Where Monthly_Budget <= @actualBudget)

答案 1 :(得分:0)

所以你有一些预算作为输入,并希望获得预算低于或等于你的投入的最接近的奖金?

在这种情况下,这应该有效:

SELECT Extra_Bonus, {exampleBudgetVariable} - Monthly_Budget as diff FROM Monthly_Budget_TBL
WHERE {exampleBudgetVariable} - Monthly_Budget >= 0
ORDER BY diff ASC
LIMIT 1

{exampleBudgetVariable}应该以您编码的语言替换为您的示例预算

答案 2 :(得分:-1)

为了正确地证明这一点,我将补充几张额外的表格。让我们假装您有一个Employees表格,其中包含EmployeeID列和Name列,MonthlySalesSummary表格带有EmployeeID列和SalesAmount列。您希望与每个销售人员的预算相匹配的是此SalesAmount值。以下是查询的外观:

SELECT e.Name, b.Extra_Bonus
FROM Employee e
INNER JOIN MonthlySalesSummary s ON s.EmployeeID = e.EmployeeID
CROSS APPLY (
    SELECT TOP 1 Extra_Bonus FROM Monthly_Budget_TBL WHERE Monthly_Budget > SalesAmount ORDER BY Monthly_Budget
) b