我需要按组中的元素在所有列中设置最小值。表的问题是列lastupdate
,有些值具有'0001-01-01'
,因此当我应用MIN()
时,它不会给我正确的值。
我尝试使用此代码,但行不通。我想在所有列中使用period
和coddoc
的MIN
值。
SELECT
period,
coddoc,
(
CASE WHEN MIN(lastupdate)='0001-01-01'
THEN MIN(lastupdate)
ELSE MIN(lastupdate)
END
) as lastupdate
FROM table
GROUP BY period, coddoc;
感谢您的帮助。
只需利用MIN()
忽略NULL
值的事实:
SELECT
period,
coddoc,
MIN(CASE WHEN lastupdate = '0001-01-01' THEN NULL ELSE lastupdate END) as lastupdate
FROM table
GROUP BY period, coddoc;
nb:正如@dnoeth所说的那样,案例表达式可以缩短为:
NULLIF(lastupdate, '0001-01-01')
为什么不只是在where
子句中过滤?
SELECT period, coddoc, MIN(lastupdate) as lastupdate
FROM table
WHERE lastupdate > '0001-01-01'
GROUP BY period, coddoc;