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

SQL如何查询每个客户ID对应值为真的最大编号指标字段

问题说明

现有一张客户指标表,共6个字段:客户ID(cid)、5个二值指标字段f1到f5,样例数据如下:

cid, f1, f2, f3, f4, f5
101, 1,  1,  1 , 0 , 0
102, 1,  1,  0 , 0 , 0
103, 1,  0,  0 , 0 , 0 

查询需求

针对每个客户ID,查询获取指标值为1(真值)的编号最大的f字段。

预期输出结果

for 101 -> f3;
for 102 -> f2;
for 103 -> f1;

测试表复现代码

执行以下SQL即可创建测试表并插入样例数据:

CREATE TABLE customer_status
(
cid int,
f1 int,
f2 int,
f3 int,
f4 int,
f5 int);

insert into customer_status values(101, 1,  1,  1 , 0 , 0);
insert into customer_status values(102, 1,  1,  0 , 0 , 0);
insert into customer_status values(103, 1,  0,  0 , 0 , 0);
查询实现方案

用CASE表达式从编号最大的f字段倒序判断,第一个命中值为1的字段就是目标字段,逻辑简单且执行效率最高:

SELECT
  CONCAT('for ', cid, ' -> ',
    CASE
      WHEN f5 = 1 THEN 'f5'
      WHEN f4 = 1 THEN 'f4'
      WHEN f3 = 1 THEN 'f3'
      WHEN f2 = 1 THEN 'f2'
      WHEN f1 = 1 THEN 'f1'
      ELSE NULL
    END, ';'
  ) AS res
FROM customer_status;

执行上述SQL得到的结果和预期完全匹配:

cidres
101for 101 -> f3;
102for 102 -> f2;
103for 103 -> f1;

如果不需要拼接输出格式,仅需要返回对应字段名,直接取CASE语句的计算结果作为字段值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:51:09