从连接返回表中的最新行

时间:2013-05-15 18:19:12

标签: mysql mariadb

我有两张桌子。考虑它们表A和表B.

表A中包含的东西列表。

表B 可能的条目指向表A中的 thing

也就是说,对于表A中的每一行,表B中可能有0行或 n 行链接回它(通过表B中的某些ID列)。 / p>

我想要做的是运行带有某种JOIN的SELECT语句,它返回表A中所有行的列表(所有列)和表B中的1列,其中表B中的1列是有序的DESC(该列是时间戳,我想要最新的时间戳。

也就是说,我希望我的SELECT语句为表A中的每一行返回1行。结果集中的一列将是表B中的数据,并且它必须从最近的数据中获取数据对应于表A行的条目。

我真的不知道如何做到这一点。我甚至尝试将“TableB.created_on = max(TableB.created_on)”添加到JOIN的ON子句中。

1 个答案:

答案 0 :(得分:1)

假设样本架构看起来像

CREATE TABLE a
    (id INT, description VARCHAR(64)); 
CREATE TABLE b
    (id INT, timestamp timestamp);

你可以做到

SELECT *,
       (SELECT MAX(timestamp) 
          FROM b 
         WHERE id = a.id) max_timestamp
FROM a

SELECT a.id, a.description, MAX(b.timestamp)
  FROM a JOIN b 
    ON a.id = b.id
 GROUP BY a.id, a.description

SQLFiddle (对于两个查询)