SQL MAX()省略值

时间:2011-06-10 11:09:56

标签: sql sql-server-2008 max

我有一个带有“版本”列的表 它指定了带有字符串“3.2.2.0”的软件版本 它也可以有“DEBUG”版本

我想获取列的MAX值,但省略了DEBUG, DEBUG仅显示if是否为唯一值

示例:

Version
-------
3.2.0
3.2.0
DEBUG
3.2.1
3.2.2

MAX(version) 
result obtained -> DEBUG
result desired -> 3.2.2

Version
-------
DEBUG
DEBUG
DEBUG

MAX(version) 
result -> DEBUG  OK!

谢谢!

2 个答案:

答案 0 :(得分:3)

select max(version)
from my_table
where version != 'DEBUG'
union
select max(version)
from my_table
where not exists (select * from my_table where version != 'DEBUG');

或者如果您使用的是mysql:

select ifnull(max(version), 'DEBUG')
from my_table
where version != 'DEBUG'

和postgres:

select coalesce(max(version), 'DEBUG')
from my_table
where version != 'DEBUG'

答案 1 :(得分:3)

这只触及一次表。这是这个简单......

...
CASE
   WHEN MIN(Version) = 'DEBUG' THEN 'DEBUG'
   ELSE MAX(NULLIF(Version, 'DEBUG'))
END AS Version
...

原创,更新前:

...
MAX(CASE WHEN Version = 'DEBUG' THEN '' ELSE Version END)
...