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

如何获取各唯一fk_customer对应最大pk_license的option_1值

解决License表的分组查询问题

嘿,我来帮你搞定这个SQL查询需求!首先明确你的目标:获取每个唯一fk_customer对应的最大pk_license的option_1值。先看看你之前尝试的SQL里存在的小问题:字段名写错了(原表是option_1你写成了opt_2,fk_customer写成了fk_station),而且分组逻辑也不对——我们只需要按fk_customer分组找最大pk_license,不需要把option_1加入分组。

下面给你两种靠谱的解决方案:

方案一:关联子查询(兼容大多数数据库)

这种方法先通过子查询拿到每个客户的最大pk_license,再关联原表获取对应的option_1值:

SELECT li.fk_customer, li.option_1
FROM License li
INNER JOIN (
    -- 子查询:按客户分组,拿到每个客户的最大pk_license
    SELECT fk_customer, MAX(pk_license) AS MaxLicense
    FROM License
    GROUP BY fk_customer
) groupedli 
    ON li.fk_customer = groupedli.fk_customer 
    AND li.pk_license = groupedli.MaxLicense;

方案二:窗口函数(适合支持窗口函数的数据库,如MySQL8+、PostgreSQL等)

用ROW_NUMBER()窗口函数可以更简洁地实现需求,每个客户组内按pk_license降序排序,取第一条就是最大的那条:

SELECT fk_customer, option_1
FROM (
    SELECT 
        fk_customer, 
        option_1,
        -- 按客户分区,区内按pk_license降序排,给每条记录标序号
        ROW_NUMBER() OVER (PARTITION BY fk_customer ORDER BY pk_license DESC) AS rn
    FROM License
) sub
-- 取每个分区里序号为1的记录(即pk_license最大的那条)
WHERE rn = 1;

拿你提供的测试数据验证,这两个查询都会返回正确结果:比如fk_customer=1对应的最大pk_license是30640,option_1为1;fk_customer=144对应的最大pk_license是30579,option_1为0,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:23:05