如果输入的记录没有找到,如何在 SQL 中查找下一个更大的可用记录

3

我的表格是下一个

Part Number     Voltage Amp HP
MMX34AA014F0-0      480 14  10
MMX34AA016F0-0      480 16  10
DC1-34018FB-A20N    480 18  10

我想在我的数据库中搜索一条记录,例如 HP = '10' And [Amp ]= '14',它应该给我返回 MMX34AA014F0-0 这个结果,这很好。

但是如果 HP = '10' And [Amp ]= '13',它应该只返回 MMX34AA014F0-0 这个结果。

Part Number     Voltage [Amp]   HP
MMX34AA014F0-0  480 14  10

如果 HP = '10' 并且 [Amp] = '15',则应该返回 MMX34AA016F0-0。
Part Number     Voltage  [Amp]  HP
MMX34AA016F0-0  480 16  10

我该怎么做呢? 因为我现在的做法是检索所有大于我输入的 [amp] 变量的记录,而我真正想要的是,如果没有找到值等于 [amp] 的记录,则查找下一个大于我输入的值的记录。


你想要 LINQ 还是 SQL? - Jodrell
选择 [零件编号] 和 [安培数] 从mytable中 其中 [电压] = '480' 并且 [马力] = '10' 并且 ([安培数] = '14' 或者 [安培数] = '16' 或者 [安培数] = '18') 如果找不到安培数为14,则继续查找下一个,以此类推,如果找到该值,则停止搜索。这是一个包含许多不同值的大型表格。 - Marcy Garcia
2个回答

3
这会给你想要的东西,其中@hp是你的变量hp,@amp是你的变量amp
SELECT * 
FROM mytable
WHERE [HP] = @hp
   AND [AMP] = (SELECT MIN([AMP]) FROM mytable WHERE [HP] = @hp AND [AMP] >= @amp)

1
在微软的T-SQL中,我做了类似这样的事情:
select top 1 * from table t1 where t1.value >= 10 order by value

如果表中存在10,则返回10;如果不存在,则返回11、12、13等。我认为你可以使用mySQL中的“limit”命令进行类似操作,因为“top”是MS t-sql命令。

2
需要按照value进行排序以确保顺序。 - Jodrell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接