2009-09-10 84 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