MySQL连接表 - 选择最新的行

3

I have the following two MySQL tables

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中选择所有信息,并从表格STATUS中添加最新的对应时间戳列。 结果
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

我卡在这里了。如何仅在较新的时间戳上进行左连接?

3个回答

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

我喜欢你的回答。这正是我在寻找的。谢谢。只需要作出小小的更改...选择 names.ID ,MAX(status.date) AS datecrenames,status 中 WHERE names.ID = names.name_ID GROUP BY names.ID - cmancre

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)上创建索引以使其运行速度更快。


听起来太复杂了。上面的“Haim Evgi”的回答看起来更简洁,也更有意义。你觉得呢? - cmancre
1
如果您只需要table_status中的timestamp值,那么Haim的解决方案很好。 - Quassnoi

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接