1

我正在使用 sql 在视图上编写数据块中的查询,并希望计算跨多个视图的更新时间戳列的最大日期。例如,我正在将表 a 与表 b 连接起来,并且想知道 max(a.updt_ts,b.updt_ts)。由于 max 函数不能超过一列,我想创建一个函数。任何帮助是极大的赞赏。以下是我所拥有的:

CREATE temporary FUNCTION ufnGetMaxDt (@Date1 DATETIME2,@Date2 DATETIME2) 
BEGIN  
    DECLARE @ret   DATETIME2
          , @MinDt datetime2;  

    SET @MinDt = cast('1900-01-01' as datetime2);

    IF (@Date1) is null  SET @Date1 = @MinDt; 
    IF (@Date2) is null  SET @Date2 = @MinDt; 


    SET @ret = CASE When @Date1 >= @Date2
                    Then @Date1
                    else @Date2
                    END; 

     IF (@ret IS NULL)   
        SET @ret = @MinDt;  -- Dummy date
    RETURN @ret;  
END
GO
4

1 回答 1

0

你可以用greatest吗?例如

SELECT *, GREATEST( date1, date2 ) xmax 
FROM tmp

或者把它们放在一个数组中,爆炸它然后最大化?例如这样的:

%sql
WITH cte AS
(
SELECT *, EXPLODE( ARRAY( date1, date2 ) ) xmax 
FROM tmp
)
SELECT MAX( xmax )
FROM cte

当你可以使用时似乎有点过分greatest?还值得一读 Spark SQL 内置函数列表。您不必全部记住它们,但至少如果您知道某些事情是可能的,那么它是有用的:

https://spark.apache.org/docs/2.3.0/api/sql/index.html

于 2018-07-06T10:57:42.763 回答