2011-11-29 9 views
5

次のデータ(サンプル)を持つMySQLテーブルがあります。mysqlデータベースの最後の行の値を取得する方法

UserId - DeviceId - StartDate - EndDate 
------------------------------------------------------ 
1001  D119822   11/27/2011  12/02/2011 
1001  D198726   11/27/2011  12/02/2011 
1001  D552833   11/27/2011  12/02/2011 
1001  D980993   11/27/2011  12/02/2011 

私はrow_numまたはordinal_positionの事のいくつかの種類を探しますが、何も見つかりませんでした。 シリアル/自動インクリメント番号列を追加せずに、上記の表から最新のレコードを取得するにはどうすればよいですか?

+1

最新の記録は何ですか?その理由は何ですか?主キーとは何ですか? – gbn

+0

@gbn:最新のレコードでは、最後に追加されたレコードを意味します。私のテーブルには主キー列はありません。 –

+1

ORDER BY句に何か使用する必要があります。テーブル(セット)に**暗黙の注文**がSQLにあります – gbn

答えて

4

このクエリを試してみてください、私はそれをテストし、それは私のために働く。

select s.*, @rownum:[email protected]+1 as rank 
from your_table s, (SELECT @rownum:=0) r 
order by rank DESC 
LIMIT 1; 
+0

ランクは大きなデータセットに対して任意です。どのように評価されるのか分かりません – gbn

+0

@gbn ORDER BY句を指定しないと、MySQLがデータをソートするかどうかわかりません。私はいくつかのテーブル上の要求をテストし、正解を返すので投稿しました;) – Fred

+0

ORDER BYなしの注文はありません – gbn

4

「最後の」アルファベットことができ、時間、値などあなたは、単にクエリでそれを定義する必要があります。

SELECT * 
FROM Mytable 
ORDER BY (some criteria that defines "last") DESC 
LIMIT 1; 
+0

しかし私のテーブルには、ある種のものを定義するいくつかの基準がありません。 –

+0

@gbnこのリクエストの基準は必要ありませんが、カウンタを作成することで解決できると思います。私の要望についてあなたからのフィードバックをいただけますか? – Fred

3

[OK]を、この質問に対する答えは単純NOですので。 MySQLには、データが挿入された順序を追跡するための組み込み機能はありません。

行が挿入されたときに自動インクリメント(一意のID)する列を追加することも、行が挿入された時間を記録するタイムスタンプ列を追加することもできます。

テーブルを操作することが許可されていない場合は、最後に追加されたデータ行を格納するために新しいテーブルを追加することもできます(実際は悪い解決策です)。

+0

私の要求を見て;)あなたはテーブル構造を変更する必要はありません。 – Fred

+0

いつも時間とお金にかかります。最後に追加されたデータを取得することが時間とテーブルの再構築の価値があるなら、それは彼らがすべきことです。どこかで自動インクリメントされたIDがあれば、メンテナンスとさらなる開発も簡単になり、コストも安くなります。 – Niklas