我有以下两个MySQL表
TABLE NAMES
NAME_ID NAME
1 name1
2 name2
3 name3
表状态
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
我想从表格 NAMES 中选择所有信息,并从表格状态
中添加最近的通讯 TIMESTAMP 列RESULT
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
我坚持这个。 如何仅在较新的时间戳上离开?
答案 0 :(得分: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
答案 1 :(得分: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)
上创建一个索引,以便快速工作。
答案 2 :(得分: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);