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

MariaDB 10.3替代LATERAL/CROSS APPLY实现最新笔记日期查询

适配MariaDB 10.3的查询方案

针对你的需求——查询所有工单及其关联的最新笔记post_date,在MariaDB 10.3不支持LATERAL的情况下,可以用以下几种替代方案:

方案1:SELECT子句中使用关联子查询

这种写法最接近你原本的LATERAL思路,直接为每个工单单独查询最新的笔记日期:

SELECT 
    t.*,
    (SELECT note.post_date 
     FROM note 
     WHERE note.ticket_id = t.id 
     ORDER BY note.post_date DESC 
     LIMIT 1) AS latest_post_date
FROM ticket t;

如果需要只保留有笔记的工单,可以添加过滤条件:

SELECT 
    t.*,
    (SELECT note.post_date 
     FROM note 
     WHERE note.ticket_id = t.id 
     ORDER BY note.post_date DESC 
     LIMIT 1) AS latest_post_date
FROM ticket t
WHERE EXISTS (SELECT 1 FROM note WHERE note.ticket_id = t.id);

方案2:先聚合笔记表再关联

先在笔记表中分组找出每个工单的最新post_date,再与工单表关联,适合数据量较大的场景:

SELECT 
    t.*,
    n.latest_post_date
FROM ticket t
LEFT JOIN (
    SELECT 
        ticket_id,
        MAX(post_date) AS latest_post_date
    FROM note
    GROUP BY ticket_id
) n ON t.id = n.ticket_id;

若要排除无笔记的工单,将LEFT JOIN替换为INNER JOIN即可。

方案3:笔记表自连接筛选最新记录

通过自连接找到每个工单中post_date最大的笔记,再关联工单表,这种方式适合需要同时获取笔记其他字段的场景:

SELECT 
    t.*,
    n.post_date AS latest_post_date
FROM ticket t
LEFT JOIN note n ON t.id = n.ticket_id
LEFT JOIN note n2 ON n.ticket_id = n2.ticket_id AND n.post_date < n2.post_date
WHERE n2.id IS NULL;

这里利用自连接逻辑:筛选出没有比当前笔记post_date更大的记录,即为对应工单的最新笔记。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:01:10