mysqlA表连接B表,并取B表中更新时间最新

场景一 要实现A表连接B表,并取B表中更新时间最新的那条记录,可以使用以下SQL查询:

方法一

python 复制代码
SELECT A.*, B.*
FROM A 
LEFT JOIN (
    SELECT *, 
           ROW_NUMBER() OVER (PARTITION BY b_foreign_key ORDER BY update_time DESC) AS rn
    FROM B
) B ON A.id = B.b_foreign_key AND B.rn = 1

方法二

bash 复制代码
SELECT A.*, B.*
FROM A
LEFT JOIN B ON A.id = B.b_foreign_key
INNER JOIN (
    SELECT b_foreign_key, MAX(update_time) as max_update_time
    FROM B
    GROUP BY b_foreign_key
) B_latest ON B.b_foreign_key = B_latest.b_foreign_key 
           AND B.update_time = B_latest.max_update_time

方法三:在大数据集上性能欠缺

bash 复制代码
SELECT A.*, B.*
FROM A
LEFT JOIN (
    SELECT *
    FROM B b1
    WHERE b1.update_time = (
        SELECT MAX(b2.update_time)
        FROM B b2
        WHERE b2.b_foreign_key = b1.b_foreign_key
    )
) B ON A.id = B.b_foreign_key

场景二 取版本号最大的一整条信息

方法一:使用max函数。注意:版本号不是简单的数字,而是像 "v1.2.3" 这样的字符串, 需要使用适当的字符串比较函数或者转换函数

bash 复制代码
SELECT *
FROM your_table
WHERE version = (
    SELECT MAX(version)
    FROM your_table
)
LIMIT 1

方法二:

bash 复制代码
SELECT *
FROM your_table
ORDER BY version DESC, update_time DESC
LIMIT 1
相关推荐
hef2886 小时前
如何生成特定SQL的AWR报告_@awrsqrpt.sql深度剖析单条语句性能
jvm·数据库·python
xcjbqd07 小时前
Python API怎么加Token认证_JWT生成与验证拦截器实现
jvm·数据库·python
二月十六7 小时前
SQL Server 2022 新语法:IS [NOT] DISTINCT FROM 彻底解决 NULL 比较难题
数据库·sqlserver
~ rainbow~7 小时前
前端转型全栈(四)——常见的错误及解决方案
数据库·oracle·全栈
数厘7 小时前
2.1SQL 学习:先懂数据库概念再学 SQL
数据库·sql·学习
Cat_Rocky8 小时前
redis哨兵模式
数据库·redis
广师大-Wzx8 小时前
一篇文章看懂MySQL数据库(下)
java·开发语言·数据结构·数据库·windows·python·mysql
hef2889 小时前
golang如何使用range over func_golang range over func迭代器使用方法
jvm·数据库·python
qq_3806191610 小时前
html如何查看windows
jvm·数据库·python
爱学习的小邓同学10 小时前
MySQL --- MySQL数据库基础
数据库·mysql