我想获得最接近或最接近下方的行返回的item_id。例如:
因此,如果我想要下面的行,我会输入3和1将返回。如果我想要输入3以上将返回4。
类似于:exec [myFunction] 3, 'up';
我正在研究获得最接近的相对数字(https://dba.stackexchange.com/questions/73804/how-to-retrieve-closest-value-based-on-look-up-table)。但问题是它将返回最接近的数字。如果我输入3但是下一个数字是7加1来制作4并且运行这将导致3再次。我希望这是有道理的。
然后我使用ABS功能(http://www.techfounder.net/2009/02/02/selecting-closest-values-in-mysql/)查看它。
SELECT top 1 item_id, ABS(3) AS distance
FROM ndc
ORDER BY distance
它有类似的问题。
如何达到预期效果?
答案 0 :(得分:3)
if @direction = 'up'
begin
select top(1) item_id from table_name
where item_id > @inputNumber
order by item_id asc
end
else
begin
select top(1) item_id from table_name
where item_id < @inputNumber
order by item_id desc
end
答案 1 :(得分:1)
您可以将其合并到一个查询中:
select top 1 item_id
from ncd
where (item_id < @item_id and @dir = 'down') or
(item_id > item_id and @dir = 'up')
order by (case when @dir = 'up' then item_id end) asc,
(case when @dir = 'down' then item_id end) desc;
但我建议你使用两个查询:
select top 1 item_id
from ncd
where item_id > @item_id
order by item_id end asc;
select top 1 item_id
from ncd
where item_id < @item_id
order by item_id end desc;
然后在存储过程中使用if
逻辑。这些可以更容易地利用ncd(item_id)
上的索引。
答案 2 :(得分:0)
你不能只设置一个名为@UpOrDown的参数,并在where子句中输入
case when @UpOrDown = 'Above' then ITEM_ID > 3 else ITEM_ID < 3 end