2009-09-10 181 views
3

我有一个查询,看起来有点像这样:如何使MySQL MAX()考虑NULL最小的可能值?

SELECT weekEnd, MAX(timeMonday) 
FROM timesheet 
GROUP BY weekEnd 

为timeMonday的有效值是:空,-1,0,1-24。目前,MAX()将这些值的首选项按照null,-1,0,1-24的顺序排序,但我实际需要的是-1,null,0,1-24,所以null被认为更高比-1。我知道MAX不能做到这一点,那么实现它的最简单方法是什么?

+0

什么是'1-24'?最大日期:http://stackoverflow.com/questions/19763806/mysql-ignores-null-value-when-using-max – 2015-11-25 10:20:18

回答

2

SELECT周末,MAX(聚结(timeMonday, - 5)。) FROM时间表 GROUP BY weekEnd

然后将-5转换回nul l

+2

PROTIP for future googlers:使用'AS'关键字来命名您的专栏,以便更容易地从程序中访问。 'SELECT weekEnd,MAX(coalesce(timeMonday, - 。5))AS max_monday FROM时间表GROUP BY weekEnd' – Tyzoid 2013-08-28 14:04:32

1
SELECT weekEnd, CASE WHEN maxTimeMonday = -0.5 THEN NULL ELSE maxTimeMonday END maxTimeMonday 
FROM (
    SELECT weekEnd, MAX(CASE WHEN timeMonday IS NULL THEN -0.5 ELSE timeMonday END) maxTimeMonday 
    FROM timesheet 
    GROUP BY weekEnd) T 

在计算MAX时将NULL替换为-0.5,然后将其恢复为NULL。

(MS SQL Server语法)

1
SELECT weekEnd, MAX(COALESCE(timeMonday, '-0.1')) 
FROM timesheet 
GROUP BY weekEnd 

编辑:没有测试此

SELECT weekEnd, REPLACE(MAX(COALESCE(timeMonday, '-0.1')), '-0.1', 'null') 
FROM timesheet 
GROUP BY weekEnd 
+0

你已经关闭括号到早期 SELECT weekEnd,MAX(COALESCE(timeMonday,'-0.1')) ) – 2009-09-10 16:00:41

+0

@Lukasz,谢谢。修正了 – Glen 2009-09-10 16:05:05