如何只选择下一个较小的值

时间:2015-08-17 19:18:53

标签: sql sql-server

我正在尝试使用SQL从数据库中选择较小的数字。

我有桌子,我有这样的记录

ID NodeName NodeType
4  A        A
2  B        B
2  C        C
1  D        D
0  E        E

和其他列,如名称和类型。

如果我通过" 4"作为参数,我希望收到下一个最小的数字记录:

ID NodeName NodeType
2  B        B
2  C        C

现在,如果我使用<标志,那就是给我

ID NodeName NodeType
2  B        B
2  C        C
1  D        D
0  E        E

我怎样才能使这个工作?

2 个答案:

答案 0 :(得分:6)

您可以使用WITH TIES子句:

SELECT TOP (1) WITH TIES *
FROM mytable
WHERE ID < 4
ORDER BY ID DESC

TOP子句与WHEREORDER BY一起选择下一个最小值到4WITH TIES子句保证所有这些值将被返回,以防有多个。

Demo here

答案 1 :(得分:3)

select ID
from dbo.yourtable
where ID in
(
    select top 1 ID
    from dbo.your_table
    where ID < 4
    order by ID desc
);

注意:dbo.your_table是您的源表

它使用内部查询来拉取所选值下面的下一个最小ID。然后外部查询将所有与下一个最小值的ID匹配的记录拉出来。

这是一个完整的工作示例:

use TestDatabase;
go

create table dbo.TestTable1
(
    ID int not null
);
go

insert into dbo.TestTable1 (ID)
values (6), (4), (2), (2), (1), (0);
go

select ID
from dbo.TestTable1
where ID in
(
    select top 1 ID
    from dbo.TestTable1
    where ID < 4
    order by ID desc
);
/*
ID
2
2
*/