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

多表关联查询:获取每条用户记录的最新采购设备数据

解决方案:获取每个用户最新购买的设备记录

首先假设你的用户表名为users,设备表名为devices(如果实际表名不同,替换成你的表名即可)。要实现需求,我们可以通过两种常见方式搭配INNER JOIN来完成,确保只保留有设备关联的用户,同时精准筛选出每个用户的最新设备记录。

方法一:使用ROW_NUMBER()窗口函数(推荐)

这种方法逻辑清晰,还能灵活处理同一用户同一天购买多台设备的场景——如果需要唯一结果,行号会确保只取一条;若想保留所有同一天的记录,可改用RANK()替代ROW_NUMBER()。

SELECT 
    u.id,
    u.name,
    d.device_id,
    d.devicename AS device_name
FROM users u
INNER JOIN (
    SELECT 
        device_id,
        id,
        devicename,
        purchasedate,
        -- 按用户id分组,购买日期降序排序,最新的记录行号标记为1
        ROW_NUMBER() OVER (PARTITION BY id ORDER BY purchasedate DESC) AS rn
    FROM devices
) d ON u.id = d.id
WHERE d.rn = 1;

方法二:子查询获取最大购买日期(兼容老版本数据库)

如果你的数据库不支持窗口函数(比如早期版本的MySQL),可以用这种方式:先找出每个用户的最新购买日期,再关联设备表和用户表筛选对应记录。

SELECT 
    u.id,
    u.name,
    d.device_id,
    d.devicename AS device_name
FROM users u
INNER JOIN devices d ON u.id = d.id
INNER JOIN (
    SELECT id, MAX(purchasedate) AS latest_date
    FROM devices
    GROUP BY id
) max_d ON d.id = max_d.id AND d.purchasedate = max_d.latest_date;

最终结果

两种方法都会返回你预期的结果:

idnamedevice_iddevice_name
1john3iphone3
2doe5iphone5
3jan6iphone6

注意:如果某个用户在同一天购买了多台设备,方法二会返回多条该用户的记录,而方法一默认只返回一条,你可以根据实际需求调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:36:28