2011-07-13 14 views
0

私は2つの列、名前とタイムスタンプ、および共有名を持つ行の束を持つテーブルがある場合。どのように同じ名前を共有する各行セットの最新の行を選択するのですか?シンプルなMySQLの選択

ありがとうございます!

答えて

2
SELECT name, MAX(timestamp) FROM Table1 GROUP BY name 

編集:コメントに基づいて、次のことを試してください。

なし依存サブクエリとMCHL

バージョンで追加されました

SELECT name, timestamp, col3, col4 
FROM Table1 t1 
WHERE timestamp = (SELECT MAX(t2.timestamp) 
       FROM Table1 t2 
       WHERE t1.name = t2.name); 

(より良い実行する必要があります)

SELECT 
    t1.name, t1.timestamp, t1.col3, t1.col4 
FROM 
    Table1 AS t1 
CROSS JOIN (
    SELECT 
    name, MAX(timestamp) AS timestamp 
    FROM 
    Table1 
    GROUP BY 
    name 
) AS sq 
USING (name,timestamp) 
+0

謝罪、私は必要な行の実際に他の列があるのグループを忘れてしまったその最大のタイムスタンプ – p9807

+0

依存サブクエリに関連付けられている特定の行...性能が悪い – Mchl

+0

@Mchl、性能に関する更新をありがとう。 –

1

次に、サブクエリが必要です。

SELECT columns 
FROM Table1 t1 
WHERE row_id = (SELECT row_id 
       FROM table1 t2 
       WHERE t1.name = t2.name 
       ORDER BY timestamp DESC 
       LIMIT 1) 
GROUP BY name 

編集は、私は必要な...名前で