создание функции максимальной даты с использованием sql в блоках данных - PullRequest
0 голосов
/ 06 июля 2018

Я пишу запросы в блоках данных с использованием 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

1 Ответ

0 голосов
/ 06 июля 2018

Вы могли бы просто использовать 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

...