我有一个需要传入两个参数的函数:
它的目的是找到给定参数的预算率。换句话说,它应该找到最接近
预算费率如下:
@iEmployeeID
和@dDate
。它的目的是找到给定参数的预算率。换句话说,它应该找到最接近
@dDate
参数且小于等于它的日期,并返回对应的费率。预算费率如下:
起始日期 费率 ------- ----- 01-01-2008 600 01-01-2009 800 01-01-2010 700
DECLARE @result decimal(38,20)
SELECT @result = decRate
FROM BudgetRates BR
WHERE BR.iRefEmployeeID = @iEmployeeID
GROUP BY decRate
HAVING MAX(BR.dStart) <= @dDate
RETURN @result
- 当输入参数为
06-06-2008
时,它正确返回600。 - 当输入参数为
03-03-2009
时,它正确返回800。 - 当输入参数为
02-02-2010
时,它应该返回700。但实际上这个函数返回了800。
这个问题出在哪里呢?
解决方法: 如果我对数字进行微调,它似乎会选择最大的费率,如果有两个值可以选择。
SELECT TOP 1 @result = decRateWeekday FROM tbl_eCon_Target_BudgetRates BR WHERE BR.iRefEmployeeID = @iEmployeeID GROUP BY decRateWeekday, dStart HAVING MAX(BR.dStart) <= @dDate ORDER BY dStart DESC RETURN @result
非常感谢您的帮助,我非常感激。 - DoStuffZ