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

使用Inner Join关联表取最大日期,查询每个用户最新疾病日志记录

解法1:使用窗口函数(推荐,支持MySQL 8.0+/PostgreSQL/SQL Server等主流数据库)

先给每个用户的日志按date字段倒序排序,取每个用户排序第一的记录,再关联用户表即可:

SELECT 
    u.id,
    u.name,
    dl.id AS logId,
    dl.logType,
    dl.date
FROM Users u
INNER JOIN (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY userId ORDER BY date DESC) AS rn
    FROM Diseaselogs
) dl ON u.id = dl.userId AND dl.rn = 1;

如果同一个用户存在多条date相同的最大日期记录,希望全部返回的话,把ROW_NUMBER()换成RANK()即可。


解法2:子查询适配低版本数据库(如MySQL 5.x)

先查询出每个用户的最大日志日期,再两次关联取对应记录:

SELECT 
    u.id,
    u.name,
    dl.id AS logId,
    dl.logType,
    dl.date
FROM Users u
INNER JOIN (
    SELECT userId, MAX(date) AS max_date
    FROM Diseaselogs
    GROUP BY userId
) max_dl ON u.id = max_dl.userId
INNER JOIN Diseaselogs dl ON dl.userId = u.id AND dl.date = max_dl.max_date;

注意这个方法如果同一个用户有多个相同最大日期的日志,会全部返回,和使用RANK()的效果一致。


两种方法执行后都可以得到你需要的预期输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 07:54:04