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

如何通过MySQL语句筛选最新200行中特定字段唯一的记录?

用MySQL直接实现:筛选最新200行中字段组合唯一的完整行

完全可以通过MySQL语句实现这个需求,不需要用PHP处理,而且效率比PHP数组对比高得多。下面提供两种可行的写法:

方法1:基于子查询分组统计(兼容所有MySQL版本)

假设你的表名为your_table,用来判断“最新”的字段是id(如果是时间字段,替换成create_time等即可),需要比较的两个字段是field_a和field_b,SQL语句如下:

SELECT t.*
FROM (
    -- 先获取最新的200行数据
    SELECT *
    FROM your_table
    ORDER BY id DESC
    LIMIT 200
) AS t
INNER JOIN (
    -- 统计这200行中两个字段组合的出现次数,仅保留出现1次的组合
    SELECT field_a, field_b, COUNT(*) AS occurrence
    FROM (
        SELECT field_a, field_b
        FROM your_table
        ORDER BY id DESC
        LIMIT 200
    ) AS temp
    GROUP BY field_a, field_b
    HAVING occurrence = 1
) AS combo_stats
ON t.field_a = combo_stats.field_a AND t.field_b = combo_stats.field_b;

逻辑说明:

  1. 最内层子查询先取出最新的200行,确保后续统计范围严格限定在这200行内
  2. 中间的子查询对这200行的field_a+field_b组合分组,统计每个组合的出现次数,筛选出仅出现1次的组合
  3. 最后通过INNER JOIN关联,获取这些唯一组合对应的完整行数据

方法2:窗口函数写法(MySQL 8.0及以上版本适用)

如果你的MySQL版本是8.0或更高,窗口函数的写法会更简洁:

SELECT *
FROM (
    SELECT 
        *,
        -- 按field_a和field_b分组,统计每组的行数
        COUNT(*) OVER (PARTITION BY field_a, field_b) AS combo_count
    FROM (
        -- 先取最新200行
        SELECT *
        FROM your_table
        ORDER BY id DESC
        LIMIT 200
    ) AS latest_200
) AS counted_rows
WHERE combo_count = 1;

逻辑说明:

  1. 内层子查询获取最新200行
  2. 中间层用COUNT(*) OVER (PARTITION BY field_a, field_b)窗口函数,为每一行标记其所属字段组合的出现次数
  3. 外层筛选出标记次数为1的行,就是符合要求的完整数据

这两种方法都不需要依赖PHP代码处理,直接在数据库层面完成计算,性能更优,也避免了PHP数组对比可能出现的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 23:44:50