Как заставить MySQL MAX () считать NULL наименьшим возможным значением? - PullRequest
3 голосов
/ 10 сентября 2009

У меня есть запрос, который выглядит примерно так:

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

Допустимые значения для timeMonday: null, -1, 0, 1-24. В настоящее время MAX () размещает предпочтения этих значений в порядке нуля, -1, 0, 1-24, однако на самом деле я хочу получить -1, нуля, 0, 1-24, так что значение нуля считается выше чем -1. Я знаю, что MAX не может этого сделать, так какой самый простой способ добиться этого?

Ответы [ 3 ]

2 голосов
/ 10 сентября 2009

ВЫБЕРИТЕ weekEnd, МАКС. ОТ расписания GROUP BY weekEnd

Затем преобразовать -.5 обратно в ноль

1 голос
/ 10 сентября 2009
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
1 голос
/ 10 сентября 2009
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

заменяя NULL на -0,5 при расчете MAX, а затем возвращая его в NULL.

(синтаксис MS SQL Server)

...