⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

LATERAL JOIN:在时间轴中逐行追溯状态变迁

利用 PostgreSQL 的 LATERAL 子查询,在对每行记录进行子查询时引用外层列,实现“针对当前行查询其前后状态”的闭环分析。 · 难度:入门 · +10XP

LATERAL JOIN:在时间轴中逐行追溯状态变迁

传统 JOIN 无法在子查询中动态引用外层当前行的字段值。LATERAL 允许子查询对外层每行执行一次,非常适合做“窗口内前一条记录”或“每个用户最近 3 笔交易”等需求。本教程以用户操作日志为例,用 LATERAL 找出每次状态变更前的最后一条日志。

-- 查找每个用户每次状态变更前 5 分钟内的最后一条日志
SELECT u.user_id, u.event_time, u.status,
       prev.event_time AS prev_time, prev.status AS prev_status
FROM user_log u
LEFT JOIN LATERAL (
    SELECT event_time, status
    FROM user_log
    WHERE user_id = u.user_id
      AND event_time < u.event_time
      AND event_time >= u.event_time - INTERVAL '5 minutes'
    ORDER BY event_time DESC
    LIMIT 1
) prev ON true
ORDER BY u.user_id, u.event_time;
Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 146 篇
0 完成
🔥 0