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

如何在MySQL中获取除最后一行外的所有DISTINCT记录?

解决MySQL排除最后一行并获取DISTINCT记录的问题

核心逻辑说明

你需要排除electric_transaction表中按SlNo最大值对应的行,同时对Prev Date和Current Date的组合去重。以下是两种可靠的实现方案:


方案一:基于SlNo最大值直接排除(性能最优)

如果SlNo是自增主键或唯一标识字段,直接通过小于最大值的条件排除最后一行,逻辑简洁且性能高效:

SELECT DISTINCT `Prev Date`, `Current Date`
FROM `electric_transaction`
WHERE `Flag` = 1
  AND `ipas_flag` = 1
  AND `SlNo` < (SELECT MAX(`SlNo`) FROM `electric_transaction`);

这里用<替代原语句的!=,逻辑更直观——直接筛选所有SlNo小于最大值的行,自然排除了所有对应最大SlNo的记录(包括存在多行SlNo等于最大值的情况)。


方案二:自定义排序规则排除最后一行

如果「最后一行」的定义不是基于SlNo,而是其他排序规则(比如按Current Date最新),可以先通过排序+LIMIT确定要排除的行的SlNo,再进行筛选:

SELECT DISTINCT `Prev Date`, `Current Date`
FROM `electric_transaction`
WHERE `Flag` = 1
  AND `ipas_flag` = 1
  AND `SlNo` NOT IN (
    SELECT `SlNo`
    FROM `electric_transaction`
    ORDER BY `Current Date` DESC, `SlNo` DESC
    LIMIT 1
  );

你可以根据需求调整子查询中的ORDER BY字段,灵活定义「最后一行」的判定规则。


注意事项

  • DISTINCT会对Prev Date和Current Date的组合去重,确保返回的日期组合没有重复。
  • 若SlNo是主键,方案一的性能远优于方案二,因为仅需一次聚合计算;若需自定义排序逻辑,优先选择方案二。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:35:31