【问题标题】:Returning most recent row in table from a join从连接返回表中的最新行
【发布时间】:2013-05-15 18:19:12
【问题描述】:

我有两张桌子。考虑一下表 A 和表 B。

表 A 中有一个事物的列表。

表 B可能有条目指向表 A 中的事物

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

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

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

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

【问题讨论】:

  • 请给schema一些问题

标签: mysql mariadb


【解决方案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(对于两个查询)

【讨论】:

  • @Andrew 您的问题需要更多帮助吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 1970-01-01
  • 2019-07-14
  • 2015-07-07
相关资源
最近更新 更多