在 Teradata 的列中设置 MIN 值

Set MIN value in a column in Teradata

我需要根据分组依据中的元素设置所有列中的最小值。 table 的问题是列 lastupdate,有些值有 '0001-01-01',所以当我应用 MIN() 时,它没有给我正确的值。

我尝试使用此代码,但不起作用。我想在所有列中通过 periodcoddoc 获得 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;