在数据块中使用 sql 创建最大日期函数
creating max date function using sql in databricks
我在视图中使用 sql 在数据块中编写查询,并希望跨多个视图计算更新时间戳列的最大日期。例如,我加入 table a 和 table 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
你可以只使用 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 内置函数列表也很值得。你不必全部记住它们,但至少如果你知道某事是可能的,那是有用的:
我在视图中使用 sql 在数据块中编写查询,并希望跨多个视图计算更新时间戳列的最大日期。例如,我加入 table a 和 table 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
你可以只使用 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 内置函数列表也很值得。你不必全部记住它们,但至少如果你知道某事是可能的,那是有用的: