在 Teradata 的列中设置 MIN 值
Set MIN value in a column in Teradata
我需要根据分组依据中的元素设置所有列中的最小值。 table 的问题是列 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;
注意:正如 @dnoeth 所评论的那样,CASE 表达式可以缩短为:
NULLIF(lastupdate, '0001-01-01')
为什么不直接在 where
子句中过滤?
SELECT period, coddoc, MIN(lastupdate) as lastupdate
FROM table
WHERE lastupdate > '0001-01-01'
GROUP BY period, coddoc;
我需要根据分组依据中的元素设置所有列中的最小值。 table 的问题是列 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;
注意:正如 @dnoeth 所评论的那样,CASE 表达式可以缩短为:
NULLIF(lastupdate, '0001-01-01')
为什么不直接在 where
子句中过滤?
SELECT period, coddoc, MIN(lastupdate) as lastupdate
FROM table
WHERE lastupdate > '0001-01-01'
GROUP BY period, coddoc;