3

次のようなクエリがあります。

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

timeMonday の有効な値は、null、-1、0、1 ~ 24 です。現時点では、MAX() はこれらの値の優先順位を null、-1、0、1-24 の順序で配置しますが、実際に必要なのは -1、null、0、1-24 であるため、null の方が高いと見なされます。 -1よりも。MAX がこれを行うことができないことはわかっています。それを達成する最も簡単な方法は何ですか?

4

3 に答える 3

2

SELECT weekEnd, MAX(coalesce(timeMonday,-.5)) FROM timesheet GROUP BY weekEnd

次に、-.5 を null に変換します

于 2009-09-10T15:59:23.817 に答える
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 構文)

于 2009-09-10T15:56:27.410 に答える
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
于 2009-09-10T15:58:30.667 に答える