如何为两列选择最接近的值?

时间:2013-10-02 13:22:35

标签: sql postgresql postgis

我需要使用两列检索具有最近值的行。 以下示例适用于一列,但两列如何?

order by abs(Column_X - myvalue_X) limit 1

我需要这样的事情:

order by abs(Column_X - myvalue_X),abs(Column_Y - myvalue_Y) limit 1 //wrong row

我在postgis中使用postgres

2 个答案:

答案 0 :(得分:3)

我不确定postgre语法和你真正想要的是什么,但是如果你想与2个字段进行比较,那么如何使用Euclidean distance

有点像

order by ((Column_X - myvalue_X)*(Column_X - myvalue_X) + (Column_Y - myvalue_Y)*(Column_Y - myvalue_Y)) limit 1

答案 1 :(得分:0)

取决于你的意思。你想让他排在两列的 sum 最接近原始行中相同两列的总和的位置吗?还是产品字母

假设这是总和。使用子查询

Select * From Table t1
  join table t2
     on t1.colA + t1.colB = 
         (Select Max(colA + colB)
          From Table
          Where colA + colB < t1.colA + t1.colB)

如果您使用该产品,那么

Select * From Table t1
  join table t2
     on t1.colA * t1.colB = 
         (Select Max(colA * colB)
          From Table
          Where colA * colB < t1.colA * t1.colB)