0

私は MySQL が苦手なので、あなたの助けが必要です。

列のあるテーブルがあります

logId、playerId、playerName、updateTime

logIdはプライマリで、自動インクリメントです。 playerIdは int(11) playerNameは varChar(36) updateTimeも int (エントリが作成されたときに UNIX タイムスタンプを保存)

データベースに次のエントリがあります。

1、444、ジョン、1379434514

2、444、ジョン、1379434414

3、445、マイク、1379434410

4、444、ジョン、1379434614

「updateTime」列に最大の整数を入れて、一意の playerId ごとに 1 つだけフェッチしたいと思います (この例では、444 の playerId に対して 4 の logId を持つものです)。

特定の playerId のすべてのエントリをグループ化し、そのうちの 1 つ (最新のもの) を選択する方法はありますか? ありがとう!

4

2 に答える 2

3

groupwise maximumが必要です。これはupdateTime、各グループの識別 (最大) を選択するサブクエリでテーブルを結合することによって取得できます。

SELECT * FROM my_table NATURAL JOIN (
  SELECT playerId, MAX(updateTime) updateTime FROM my_table GROUP BY playerId
) t

sqlfiddleで参照してください。

本当に MySQL のTIMESTAMP型 forを使用する必要があることに注意してくださいupdateTime。さらに、2NFplayerNameに違反する可能性があると思われます。

于 2013-09-17T16:31:20.357 に答える
0

私の理解が正しければ、次のように簡単に書くことができます。

select max(updateTime) 
from t1 
group by playerId

SQLFiddleを参照してください

于 2013-09-17T16:34:30.153 に答える