我有一个看起来有点像这样的查询:
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 不能做到这一点,那么实现它的最简单方法是什么?
SELECT weekEnd, MAX(coalesce(timeMonday,-.5)) FROM timesheet GROUP BY weekEnd
然后将 -.5 转换回 null
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 语法)
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