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

SQL多列查询:提取各id的12月expire值与null值lastwdIf

解决方案:关联NULL记录与12月expire值

核心需求是获取每个id的lastwdIf IS NULL的记录,并将该id对应的12月份expire值合并到同一行。以下是两种可行的SQL写法:

方法1:关联子查询

直接在主查询中嵌入子查询,获取对应id的12月expire值:

SELECT 
    t.id,
    t.Name,
    t.Vendor,
    t.lastwdIf,
    -- 子查询获取当前id的12月expire值
    (SELECT expire 
     FROM your_table 
     WHERE id = t.id 
       AND MONTH(expire) = 12) AS expire_dec
FROM your_table t
WHERE t.lastwdIf IS NULL;
  • 若某个id没有12月的expire记录,expire_dec会返回NULL;
  • 若一个id存在多条12月expire记录,子查询会报错,此时可改用MAX(expire)或MIN(expire)指定取某一条(比如最新的):
    (SELECT MAX(expire) 
     FROM your_table 
     WHERE id = t.id 
       AND MONTH(expire) = 12) AS expire_dec
    

方法2:LEFT JOIN预查询结果

先提取所有12月的expire记录,再关联到lastwdIf IS NULL的主记录:

SELECT 
    t.id,
    t.Name,
    t.Vendor,
    t.lastwdIf,
    dec.expire AS expire_dec
FROM your_table t
LEFT JOIN (
    -- 预查询每个id的12月expire记录
    SELECT id, expire 
    FROM your_table 
    WHERE MONTH(expire) = 12
) dec ON t.id = dec.id
WHERE t.lastwdIf IS NULL;
  • LEFT JOIN确保即使id没有12月数据,主记录依然会被保留;
  • 若存在多条12月记录,同样可以在子查询中用聚合函数去重,比如:
    SELECT id, MAX(expire) AS expire 
    FROM your_table 
    WHERE MONTH(expire) = 12
    GROUP BY id
    

注意事项

  • 确保expire是日期类型(DATE/DATETIME),如果是字符串格式,需先转换为日期再判断月份,例如:
    MONTH(STR_TO_DATE(expire, '%Y-%m-%d')) = 12
    
    (格式需根据实际存储的字符串调整)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 08:40:01