SQL:选择两列相减的最小值,并选择最小相减中使用的数字

标签 sql sql-server select min difference

我有两列,我想选择:价格、最小绝对值。价格和行使价之间的差异,行使价对应于最小绝对值。差值计算。我是 SQL 新手,如果这很简单,请原谅我。

Price   Strike
30.8    29
30.8    30
30.8    31
30.2    29
30.2    30
30.2    31

我想得到的答案是:

Price  Diff  Strike
30.8   .2    31
30.2   .2    30

到目前为止我的代码是:

Select min(price) as 'Price',
min(abs(price - Strike)) as 'Diff'
from Table
group by price

我不知道如何正确选择相应的罢工。

谢谢您

最佳答案

我将使用窗口函数来执行此操作。

SELECT Price,
       Diff,
       Strike
FROM   (SELECT *,
               Abs(price - Strike) Diff,
               Row_number()OVER(partition BY price ORDER BY Abs(price - Strike) )rn
        FROM   Yourtable) a
WHERE  rn = 1 

或者,如果每个 price 组的 Abs(price - Strike) 最小值存在平局,并且如果希望所有行具有相同的最小值,则使用 Dense_Rank

SELECT Price,
       Diff,
       Strike
FROM   (SELECT *,
               Abs(price - Strike) Diff,
               Dense_Rank()OVER(partition BY price ORDER BY Abs(price - Strike) )rn
        FROM   Yourtable) a
WHERE  rn = 1 

关于SQL:选择两列相减的最小值,并选择最小相减中使用的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28155634/

相关文章:

java - 网络.ucanaccess.jdbc.UcanaccessSQLException : invalid authorization specification - not found:

sql - 让 SQL 管理在 Internet 上打开

mysql - 如何在 MySQL 表中搜索前缀?

MySQL如何获取像日期格式一样分隔的月份和年份

mysql : Select "variable" as "variable2" from table

sql查询更新INNER JOINED表

sql - 创建触发器 postgresql 时访问表字段

sql - SQL Server联接结果以逗号分隔的列表

sql - 按日期之间的周数

mysql - 如何将此条件转换为查询