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

MySQL数据处理需求:按ID筛选最小值并新增Range等字段

解决方案

没问题,我帮你整理出满足需求的SQL查询,顺便拆解下每个部分的作用:

完整SQL查询

假设你的原始数据表名为your_table,可以用下面的语句实现需求:

WITH id_stats AS (
    SELECT
        ID,
        MIN(T1) AS min_T1,
        MIN(T2) AS min_T2,
        LEAST(MIN(T1), MIN(T2)) AS Minimum,
        COUNT(*) AS Count,
        -- 根据Minimum值划分指定区间
        CASE
            WHEN LEAST(MIN(T1), MIN(T2)) BETWEEN -5 AND 5 THEN '-5到5'
            WHEN LEAST(MIN(T1), MIN(T2)) BETWEEN 5 AND 10 THEN '5到10'
            WHEN LEAST(MIN(T1), MIN(T2)) BETWEEN 10 AND 15 THEN '10到15'
            WHEN LEAST(MIN(T1), MIN(T2)) > 15 THEN '15以上'
            ELSE '-5以下'
        END AS Range
    FROM your_table
    GROUP BY ID
)
SELECT
    t.ID,
    t.Date,
    t.T1,
    t.T2,
    s.Range,
    s.Minimum,
    s.Count
FROM your_table t
JOIN id_stats s ON t.ID = s.ID
WHERE t.T1 = s.min_T1 AND t.T2 = s.min_T2
ORDER BY t.ID;

查询逻辑拆解

  1. CTE id_stats 统计部分
    先按ID分组计算每个ID的核心指标:

    • min_T1/min_T2:分别提取该ID下T1、T2字段的最小值
    • Minimum:用LEAST函数取该ID所有T1和T2值中的最小数
    • Count:统计每个ID对应的总行数
    • Range:通过CASE语句判断Minimum所属的区间,覆盖了你要求的范围,同时补充了边界情况(-5以下、15以上)
  2. 主查询筛选部分
    将原表和统计结果关联,筛选出每个ID中同时包含T1最小值和T2最小值的行(从你的样本数据看,每个ID都存在这样的行),确保每个ID只返回唯一一行,最终输出包含原始字段和新增的三个字段。

执行结果预览

IDDateT1T2RangeMinimumCount
A-122017-01-01 15:05:20-33-5到5-32
A-142017-01-01 15:05:206-2-5到5-22
A-152017-01-01 15:05:201095到1092
A-172017-01-01 15:05:20191815以上181

如果你的数据中存在某个ID的T1最小值和T2最小值不在同一行的情况,可以随时告诉我,我再调整查询逻辑~


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:28:16