选择一列最接近值的行

时间:2019-06-05 00:37:28

标签: sql sql-server

我需要根据产品销售的利润率来了解推销员有权获得的佣金百分比。

为此,我有下表:

Margin    Commission
--------------------
15         9
30        10
60        11
70        12
80        13
90        15

让我们假设利润率为29。所以我需要一个返回第二行的查询(利润率最接近30)。

如何编写返回该行的SQL查询?

谢谢

3 个答案:

答案 0 :(得分:0)

这应该是使用abs()的简单查询

declare @m table(Margin int,    Comission int)
insert @m values (15, 9)
,(30, 10)
,(60, 11)
,(70, 12)
,(80, 13)
,(90, 15)

declare @target int; set @target=29

; with r as (
    select *, row_number() over (order by abs(Margin-@target)) closest
    from @m
    )
select * from r where closest=1

答案 1 :(得分:0)

您可以使用apply

select sp.*, c.commission
from salesperson sp outer apply
     (select top (1) c.*
      from commissions c
      where c.margin <= sp.margin
      order by c.margin desc
     ) c;

答案 2 :(得分:0)

您可以使用子查询来解决此问题。最近似>>使用Min(ABS())来获取它。

select * 
from table 
where (select Min(ABS(table.Margin - "your profit") from table ))