2009-07-17 28 views
2

テーブルから最初と最後のレコードを取得する方法を教えてください。DBの最初と最後のレコードを取得する方法

注:私はあなたの最初の列がキー

であると仮定し

+7

質問は意味をなさない..... –

+4

1 - >私はここで少し物議を醸すかもしれませんが、私は一度あなたには、いくつかのRDMBSに精通しているとかなりの数を実行していることを考えますあなたが意図的にORDERを指定しない限り、テーブル内の行の順序についての約束がないことを知っています。しかし初心者はそれをどのように知っていますか?それはテーブルが最初と最後の行を持っている完全に自然な投影です。 – quosoo

+0

あなたの編集への応答:注文の飾りが必要な場合はソートする必要があります。データベースは順序で格納されず、 'order by' *で指定されていない限り、set order *はありません。 Ergo、あなたは答えを見て、 'order by'句または複数のサブクエリなしであなたが望むことができないというすべての証拠に直面して、それを拒否しました。それらの答えはどちらもここにあります。あなたのニーズに最も適したものを選んでください。 – Eric

答えて

11

はあなたが何を意味するかによって異なります「最初」と「最後」。

特定の列を「ORDER BY」し、「LIMIT 1」を選択してから「ORDER BY ... DESC」を選択すると、その逆を取得できます。

SELECT * FROM table ORDER BY col LIMIT 1 
SELECT * FROM table ORDER BY col DESC LIMIT 1 

...そしてあなたは、両方同じクエリにしたい場合:

SELECT * FROM table ORDER BY col LIMIT 1 
UNION 
SELECT * FROM table ORDER BY col DESC LIMIT 1 
+0

なぜクエリ間に和集合ステートメントを追加しないのですか? – lexu

+0

理由はありません!質問がそれを望むかどうかによって異なります。私は編集:) –

2
SELECT TOP 1 * FROM Table ORDER BY 1 
SELECT TOP 1 * FROM Table ORDER BY 1 DESC 

で注文するために行うつもりはない(まあそれはT-SQLで動作します)

4

質問は本当に理にかなって、しかし、あなたはから最初と最後の行を話していると仮定していませんこれはうまくいくでしょうが、別々の2つのクエリとして実行するほうがいいでしょうし、数字のID列があると仮定します。 MySQLの例:

select * from test where id = (select max(id) from test) 
union 
select * from test where id = (select min(id) from test) 
関連する問題