如何在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
相关产品推荐
相关产品推荐

