1

私はこのようなテーブルを持っています:

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

(val3-val1)が最小のときはいつでも、IDを返すクエリをpostgreSQLで記述したいと思います。

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 に答える