2010-12-21 42 views
3

我有以下兩個MySQL表MySQL的連接表 - 選擇最新的行

表名

NAME_ID NAME 
1   name1 
2   name2 
3   name3 

TABLE STATUS

STATUS_ID NAME_ID  TIMESTAMP 
1   1   2010-12-20 12:00 
2   2   2010-12-20 10:00 
3   3   2010-12-20 10:30 
4   3   2010-12-20 14:00 

我想選擇所有來自表的信息名稱並添加最新的公司從表狀態rrespondent TIMESTAMP

結果

NAME_ID NAME  TIMESTAMP 
1  name1 2010-12-20 12:00 
2  name2 2010-12-20 10:00 
3  name3 2010-12-20 14:00 

我堅持這一點。 我如何只在較新的時間戳上離開連接?

回答

2

嘗試此查詢:

select n.NAME_ID , n.NAME , max(TIMESTAMP) as time from NAMES n left join 
STATUS s on s.NAME_ID = n.NAME_ID group by n.NAME_ID 
+0

我喜歡你的答案。這正是我所期待的。謝謝。 只是一個小變化...... 選擇`names`.`ID`,MAX(`status`.`date`)AS`datecre` FROM`names`,`status` 其中`names`.` ID` =`names`.`name_ID` GROUP BY`names`.`ID` – cmancre 2010-12-21 15:43:19

0
SELECT 
    status.* 
FROM 
    status 
     JOIN 
      (SELECT name_id, MAX(timestamp)AS latest FROM status GROUP BY name_id) AS sub 
      ON (status.name_id = sub.name_id AND status.timestamp = sub.latest); 
2
SELECT * 
FROM table_names tn 
LEFT JOIN 
     table_status ts 
ON  ts.status_id = 
     (
     SELECT status_id 
     FROM table_status tsi 
     WHERE tsi.name_id = tn.name_id 
     ORDER BY 
       name_id DESC, TIMESTAMP DESC, status_id DESC 
     LIMIT 1 
     ) 

這將正確處理重複。

table_status (name_id, timestamp, status_id)上創建一個索引,以便快速工作。

+0

聽起來太複雜了。上面的「Haim Evgi」答案看起來更清晰並且合理。你怎麼看? – cmancre 2010-12-21 15:36:02