在Teradata的一列中设置最小值



我需要按组中的元素在所有列中设置最小值。表的问题是列lastupdate,有些值具有'0001-01-01',因此当我应用MIN()时,它不会给我正确的值。

我尝试使用此代码,但行不通。我想在所有列中使用periodcoddocMIN值。

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;

最新更新