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

如何在MySQL中依据SourceType列值筛选目标行(排除法)

解决方案:按SourceType优先级筛选目标行

当然可以实现!而且完全不需要依赖CreatedDate排序,直接通过SourceType的优先级就能精准筛选出你想要的行,比按日期排序更直接精准。

方法1:用FIELD()函数指定优先级排序

这是最简洁的写法,利用FIELD()给SourceType定义优先级,再配合LIMIT 1取首行:

SELECT *
FROM your_table
-- 这里可以保留你原本的WHERE条件(如果有的话)
ORDER BY FIELD(SourceType, 'New', 'Old')
LIMIT 1;

原理:FIELD(SourceType, 'New', 'Old')会返回匹配值的位置——SourceType='New'时返回1,SourceType='Old'时返回2。排序后New的行会排在最前面,所以LIMIT 1会优先取New;如果只有Old的行,自然就取它。

方法2:用窗口函数(适合复杂分组场景)

如果你的查询涉及分组(比如按某个ID分组,每组要取符合规则的一行),窗口函数会更灵活:

SELECT t.*
FROM (
    SELECT *,
           ROW_NUMBER() OVER (ORDER BY CASE WHEN SourceType='New' THEN 1 ELSE 2 END) AS rn
    FROM your_table
    -- 你的WHERE条件
) t
WHERE t.rn = 1;

原理:通过CASE给New标记为1,Old标记为2,用ROW_NUMBER()生成行号,最后取行号为1的行,效果和方法1一致。如果需要分组处理,只需把OVER()里的内容改成PARTITION BY your_group_id ORDER BY ...即可。

关于COALESCE的说明

你提到的COALESCE主要用来返回第一个非NULL的值,而你的场景里SourceType是明确的New或Old,不存在NULL的情况,所以COALESCE在这里不太适用。上面两种方法更贴合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:32:49