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

SQL GROUP BY查询报列不在聚合函数或GROUP BY子句错误求助

报错原因

你当前的SQL违反了分组查询的基础规则:使用GROUP BY做分组聚合时,SELECT列表中出现的所有非聚合计算的字段,必须全部包含在GROUP BY子句中。你写的select *会查询出SetID等所有表字段,但GROUP BY后仅声明了MoldName字段,因此直接抛出字段不合法的错误。
另外你原本的写法逻辑也和需求不匹配:该语句仅能筛选出存在多个不同SetID的MoldName分组,无法实现“取每个MoldName对应最新日期的完整记录”的需求。

实现方案

要返回表所有列、仅保留每个MoldName对应日期最新的单条记录,优先用窗口函数实现,逻辑清晰且不会出现重复数据问题:

-- 兼容SQL Server、MySQL 8.0及以上、PostgreSQL等支持窗口函数的数据库
WITH MoldSorted AS (
    SELECT
        *,
        ROW_NUMBER() OVER (
            PARTITION BY MoldName
            ORDER BY 日期字段 DESC -- 替换为表中实际存储录入时间/创建日期的字段名,例如CreateTime、InputDate
        ) AS sort_rn
    FROM MoldInfo
)
SELECT *
FROM MoldSorted
WHERE sort_rn = 1

如果使用不支持窗口函数的低版本数据库,可以用分组关联的方式实现:

SELECT m1.*
FROM MoldInfo m1
JOIN (
    SELECT MoldName, MAX(日期字段) AS latest_time
    FROM MoldInfo
    GROUP BY MoldName
) m2
ON m1.MoldName = m2.MoldName AND m1.日期字段 = m2.latest_time

注意:如果同一个MoldName下存在多条记录的日期完全相同,上述关联写法会把同日期的所有记录都返回;如果要保证每个MoldName仅返回一条,可以在窗口函数的排序规则里追加主键倒序,例如ORDER BY 日期字段 DESC, SetID DESC,即可保证排序唯一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:15:35