如何选取两列及同一客户对应的最大决策编号(DNO)?
嘿,这两个都是SQL日常开发里很常见的需求,我来给你详细拆解下解决方案:
问题1:从两个不同列中选取最大的决策编号
要从同一行的两个不同列里取最大值,最直接的方式是用SQL内置的GREATEST()函数,它可以接收多个参数,返回其中的最大值。
举个例子,假设你的表名为decision_records,包含dno_col1和dno_col2两个存储决策编号的列,查询语句如下:
SELECT GREATEST(dno_col1, dno_col2) AS max_decision_no FROM decision_records;
需要注意的是,如果某一列存在NULL值,GREATEST()会直接返回NULL。如果想忽略NULL(比如把NULL当作0处理),可以搭配COALESCE()函数:
SELECT GREATEST(COALESCE(dno_col1, 0), COALESCE(dno_col2, 0)) AS max_decision_no FROM decision_records;
要是你用的是SQL Server这类不支持GREATEST()的数据库,也可以用CASE WHEN语句来实现:
SELECT CASE WHEN dno_col1 > dno_col2 THEN dno_col1 ELSE dno_col2 END AS max_decision_no FROM decision_records;
问题2:按客户分组选取最大决策编号
这个需求属于分组聚合场景,我们可以用GROUP BY对客户编号(CNO)分组,再用MAX()函数提取每组里的最大决策编号(DNO)。
假设你的表名为customer_decisions,对应你给出的样本数据,查询语句是:
SELECT CNO, MAX(DNO) AS max_decision_no FROM customer_decisions GROUP BY CNO;
执行后会得到结果:
| CNO | max_decision_no |
|---|---|
| 1 | 2 |
| 3 | 3 |
完全符合你要的同一客户取最大DNO的需求。
内容的提问来源于stack exchange,提问作者uk visa
相关产品推荐
相关产品推荐

