1

我有一张这样的桌子:

+-----+------------+-------+--------+
| ID  |  val1      | val2  | val3   |
+-----+------------+-------+--------+
| 100 |  110       | 25    | 530    |
| 101 |  56        | 75    | 591    |
| 102 |  65        | 93    | 827    |
| 103 |  75        | 70    | 805    |
+-----+------------+-------+--------+

我想在 postgreSQL 中编写一个查询,只要(val3-val1)最小,就会为我返回ID

4

3 回答 3

3

你可以使用order by

select  id
from    YourTable
order by
        val3 - val1
limit   1
于 2012-11-20T15:33:02.000 回答
2

如果我正确理解你想要什么,这可以用 SQL 来表达,非常接近你用文字写出来的方式。

http://sqlfiddle.com/#!12/61046/1

SELECT id
FROM table1
WHERE (val1 - val3) = (SELECT min(val1-val3) FROM Table1);

如果多行具有相同的val1 - val3. 如果有可能,您将需要添加其他标准。

于 2012-11-20T22:49:57.753 回答
1

你可以这样做:

SELECT  t1.ID
FROM Tablename t1
INNER JOIN
(
   SELECT Id, MIN(val3 - val1) Minval
   FROM Tablename
   GROUP BY Id
) t2 ON t1.ID = t2.Id AND t2.minval = (t1.val3 - t1.val1)
于 2012-11-20T15:32:48.570 回答