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

SQL查询如何为同一Customer_ID优先选取非空OrderDate值

问题原因分析

你原来的SQL无法得到预期结果核心有两个问题:

  • 缺少GROUP BY子句:在绝大多数主流数据库的严格语法模式下,SELECT中的非聚合字段必须出现在GROUP BY子句中,否则会直接报错或者返回不符合预期的聚合结果。
  • 没有明确聚合维度:你需要先确认是按Customer_ID + Products分组聚合,还是按Customer_ID统一处理同个用户的所有OrderDate。

正确实现方案

方案1:按Customer_ID + Products分组(最常用,匹配多数业务场景)

如果你的需求是每个客户+产品的组合返回一条对应的OrderDate记录,使用如下写法即可:

SELECT 
  Customer_ID,
  Products,
  MAX(OrderDate) AS OrderDate
FROM `table`
GROUP BY Customer_ID, Products
ORDER BY Customer_ID, Products

逻辑完全符合你的要求:

  • 同一分组内如果同时存在NULL和非NULL的OrderDate,MAX函数会自动忽略NULL值,返回非NULL的结果
  • 同一分组内如果只有NULL值,MAX会返回NULL,满足直接返回的规则

方案2:同Customer_ID统一返回OrderDate

如果你需要同一个客户下所有记录的OrderDate都统一为该客户存在的非NULL值(和产品无关),可以用窗口函数实现:

SELECT 
  DISTINCT Customer_ID,
  Products,
  MAX(OrderDate) OVER (PARTITION BY Customer_ID) AS OrderDate
FROM `table`
ORDER BY Customer_ID, Products

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:54:02