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

SQL查询按StartFrame列去重:GROUP BY后仍有重复行的解决方法

问题原因

你当前使用的GROUP BY StartFrame写法不符合标准SQL规范:SELECT子句中出现了大量未加入GROUP BY列表、也没有被聚合函数包裹的字段,仅在低版本MySQL等非标准配置的环境下才能执行,无法实现你要的去重效果。


解决方案

方案1:剔除完全重复的整行

如果重复行的所有字段取值完全一致,直接用DISTINCT关键字去重即可:

SELECT DISTINCT
    LabelingTasks.SessionID, LabelingFiles.LabelingFileID, 
    LabelingFiles.Link, LabelingTasks.TaskTypeID,
    LabelingTasks.StartFrame, LabelingTasks.EndFrame,
    LabelingTasks.DataMarkingTypeID 
FROM
    LabelingTasks 
INNER JOIN 
    LabelingFiles ON LabelingTaskID = LabelingFiles.LabelingTaskID 
WHERE 
    LabelingTasks.MovieID = 10832 
    AND LabelingTasks.DataMarkingTypeID = 5 
    AND LabelingTasks.TaskTypeID = 4 
ORDER BY 
    StartFrame ASC 

方案2:按StartFrame分组去重(每个StartFrame仅保留1行)

如果即使其他字段有差异,只要StartFrame相同就只保留一条记录,可使用窗口函数实现(支持MySQL 8.0+、PostgreSQL、SQL Server等主流数据库):

SELECT SessionID, LabelingFileID, Link, TaskTypeID, StartFrame, EndFrame, DataMarkingTypeID
FROM (
    SELECT 
        LabelingTasks.SessionID, LabelingFiles.LabelingFileID, 
        LabelingFiles.Link, LabelingTasks.TaskTypeID,
        LabelingTasks.StartFrame, LabelingTasks.EndFrame,
        LabelingTasks.DataMarkingTypeID,
        ROW_NUMBER() OVER (PARTITION BY StartFrame ORDER BY StartFrame) AS rn
    FROM
        LabelingTasks 
    INNER JOIN 
        LabelingFiles ON LabelingTaskID = LabelingFiles.LabelingTaskID 
    WHERE 
        LabelingTasks.MovieID = 10832 
        AND LabelingTasks.DataMarkingTypeID = 5 
        AND LabelingTasks.TaskTypeID = 4 
) t
WHERE rn = 1
ORDER BY StartFrame ASC

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:15:03