如何获得max()功能工作没有分组?砖的SQL



我有一个表,需要根据日期进行过滤。

| Group    | Account  || Values   | Date_ingested |
| -------- | -------- || -------- | --------      |
| X        | 3000     || 0        | 2023-01-07    |
| Y        | 3000     || null     | 2021-02-22    |

目标是在有多个数据点时选择最晚的日期,就像上面的例子一样。数据框中的帐户3000出现在两个组下,但最新和正确的结果应该只反映组X,因为它是最近被摄取到Databricks中的。现在,如果我尝试使用下面的代码进行分组,代码将被执行,但max函数将被忽略,在结果中,我将得到帐户3000的两个结果,组X和组y

Select Group, Account, Values, max(Date_ingested) from datatableX

如果我选择使用不分组的代码,我会得到以下错误

SQL语句错误:AnalysisException: grouping expressions sequence is empty, and 'datatableX. s '。Account'不是一个聚合函数。在窗口函数中包装'(max(spark_catalog.datatableX.Date_ingested) '为' max(Date_ingested) '或包装'spark_catalog.datatableX. Date_ingested . 'Account' in first()(或first_value)如果你不关心你得到的是哪个值

我不能,然而,想出一个方法来做上面的。我试着阅读聚合函数,但是我不能理解这个概念。

Select Group, Account, Values, max(Date_ingested) from datatableX

Select Group, Account, Values, max(Date_ingested) from datatableX 
group by Group, Account, Values

您想要每个帐户的完整最新记录,这建议过滤而不是聚合。

一种典型的方法是使用rank()按摄取日期降序枚举具有相同帐户的记录,然后在外部查询中对每个组的顶部记录进行过滤:

select *
from (
select d.*,
row_number() over(partition by account order by date_ingested desc) rn
from datatableX
) d
where rn = 1

最新更新