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

MariaDB 10.3使用DISTINCT ON触发“Near ON处期望表达式”报错如何处理

问题解答

报错原因说明

你执行的SELECT DISTINCT ON (No, Branch) * FROM Table1 ORDER BY No, a DESC;语句报错,是因为DISTINCT ON是PostgreSQL独有的语法,MariaDB、MySQL均不支持该语法,并非MariaDB和MySQL之间的特性差异,因此你使用10.3.28版本的MariaDB执行时会触发语法错误。

符合需求的实现方案

你需要按No+Branch组合去重、保留每组Datetime最大值对应的完整行,MariaDB 10.2及以上版本支持窗口函数,可以直接用ROW_NUMBER()实现,完全避免GROUP BY场景下的非分组字段数据混杂问题:

SELECT ID, No, Branch, Datetime
FROM (
    SELECT *,
        ROW_NUMBER() OVER (PARTITION BY No, Branch ORDER BY Datetime DESC) AS rn
    FROM Table1
) t
WHERE rn = 1;

上述逻辑中PARTITION BY No, Branch按指定字段分组,每组内按Datetime倒序排列,每组排名第一的行就是你需要的时间最大的完整记录。如果后续需要关联其他表取Name字段,可直接将上述查询作为子查询或CTE,基于No和Branch字段关联即可,所有原始字段都可正常调用。

如果是不支持窗口函数的旧版本MariaDB,也可以使用关联子查询方案:

SELECT t1.*
FROM Table1 t1
INNER JOIN (
    SELECT No, Branch, MAX(Datetime) AS max_dt
    FROM Table1
    GROUP BY No, Branch
) t2 ON t1.No = t2.No AND t1.Branch = t2.Branch AND t1.Datetime = t2.max_dt;

注意该方案如果同一组内存在多条完全相同的最大Datetime记录时,会返回所有匹配行,可根据实际需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:54:04