2011-07-13 41 views
0

如果我有一个包含两列的表,名称和时间戳以及一堆将具有共享名称的行。如何选择共享相同名称的每组行中的最新行?简单的MYSQL独立选择

谢谢!

回答

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

编辑:根据评论,请尝试以下方法:

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

添加人MCHL没有相关子查询

版(应该有更好的表现)

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 

编辑,忘了按名称