You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL跨表查询:根据table1最大时间戳sn取table2对应code值

报错原因

你写的SQL执行失败的核心问题是:= 操作符要求匹配的右侧子查询只能返回单个单列结果,但你写的子查询select sn, max(timestamp) from table1 GROUP BY sn会同时返回两列数据,且按sn分组后会输出多行结果,完全不符合单值匹配的语法要求,必然报错。
另外你原来子查询的逻辑也不对:按sn分组取max(timestamp)会返回每个sn各自的最大时间戳,根本不是你要的「table1全局最大epoch时间戳对应的sn」。

实现方案

这个需求不强制要求使用JOIN,两种写法都能满足要求,你可以根据场景选:

方案1:嵌套子查询(无JOIN,贴合你原写法的逻辑)

完全按照你描述的两步逻辑实现,不需要关联表,写法最直接:

SELECT code
FROM table2
WHERE sn = (
    -- 先查table1中全局最大时间戳对应的sn
    SELECT sn
    FROM table1
    ORDER BY timestamp DESC
    LIMIT 1
)
-- 再取该sn下最大时间戳对应的code
ORDER BY timestamp DESC
LIMIT 1;

如果存在多个sn同时命中table1全局最大时间戳的边界场景,把=换成IN即可兼容。

方案2:JOIN写法

如果习惯用关联查询的写法也可以,在sn、timestamp字段建了索引的前提下,执行效率和子查询写法没有明显差异:

SELECT t2.code
FROM table2 t2
INNER JOIN (
    SELECT sn
    FROM table1
    ORDER BY timestamp DESC
    LIMIT 1
) t1_latest ON t2.sn = t1_latest.sn
ORDER BY t2.timestamp DESC
LIMIT 1;
注意点

不要在取最大时间戳对应记录的时候乱用GROUP BY的写法,这种写法只能拿到每个分组内的聚合值,拿不到全局排序后第一条的目标记录,和需求逻辑不匹配。

内容的提问来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 19:27:29