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

SQL查询需求:按最大initID筛选同title多initID的行

解决方案:筛选重复title对应最大initID的行

要实现你的需求,我们可以分两步处理:先定位那些关联了多个不同initID的title,再提取这些title对应最大initID的所有行。下面提供两种实用的SQL实现方案:

方法一:窗口函数实现(推荐,简洁高效)

利用窗口函数可以一次性计算出每个title的initID数量和对应最大initID,直接筛选符合条件的行:

WITH title_init_stats AS (
    SELECT 
        *,
        -- 统计每个title下不同initID的数量
        COUNT(DISTINCT initID) OVER (PARTITION BY title) AS init_count,
        -- 找出每个title对应的最大initID
        MAX(initID) OVER (PARTITION BY title) AS max_init_id
    FROM your_table_name
)
SELECT ID, title, revision, initID
FROM title_init_stats
-- 只保留有多个initID的title,且该行属于最大initID的组
WHERE init_count > 1 AND initID = max_init_id
ORDER BY ID;

方法二:子查询关联实现

如果你的数据库不支持窗口函数,可以用子查询先统计关键信息,再和原表关联筛选:

SELECT t.ID, t.title, t.revision, t.initID
FROM your_table_name t
JOIN (
    SELECT 
        title,
        COUNT(DISTINCT initID) AS init_count,
        MAX(initID) AS max_init_id
    FROM your_table_name
    GROUP BY title
    -- 先筛选出有多个initID的title
    HAVING COUNT(DISTINCT initID) > 1
) stats ON t.title = stats.title AND t.initID = stats.max_init_id
ORDER BY t.ID;

结果验证

针对你提供的测试数据,两种方案都会返回你期望的结果:

ID | title     | revision | initID
4  | Mytitle 1 | 0        | 20
5  | Mytitle 1 | 1        | 20
10 | Mytitle 3 | 0        | 50
11 | Mytitle 3 | 1        | 50
12 | Mytitle 3 | 2        | 50

逻辑说明

  1. 先通过GROUP BY title + COUNT(DISTINCT initID)筛选出关联了多个不同initID的title;
  2. 再对这些title计算出对应的最大initID;
  3. 最后关联原表,提取所有title匹配且initID等于最大initID的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:28:36