apachespark/databricks sql中last和last\u value函数的正确行为是什么。我阅读文档的方式(这里:https://docs.databricks.com/spark/2.x/spark-sql/language-manual/functions.html)听起来它应该返回表达式中的最后一个值。
如果我有一个select语句
select
person,
last(team)
from
(select * from person_team order by date_joined)
group by person
我应该让一个人加入最后一个团队,是/否?
我正在运行的实际查询如下所示。每次执行查询时,它都返回不同的数字。
select count(distinct patient_id) from (
select
patient_id,
org_patient_id,
last_value(data_lot) data_lot
from
(select * from my_table order by data_lot)
where 1=1
and org = 'my_org'
group by 1,2
order by 1,2
)
where data_lot in ('2021-01','2021-02')
;
获取给定字段的最后一个值的正确方法是什么(对于团队示例或我的特定示例)?
---编辑
2条答案
按热度按时间sshcrbum1#
我认为collect\u set在这里可能很有用,但是当我尝试运行此程序时,出现了错误:
sql语句中出错:analysisexception:不允许在另一个聚合函数的参数中使用聚合函数。请在子查询中使用内部聚合函数。;;将[患者id#89338],[患者id#89338,最后一个Š值(收集Š集合(数据Š批次Š89342,0,0),false)聚合为数据Š批次Š91848]+-子查询别名sparkŠcatalog.covid.demo
下面显示的帖子讨论了如何获得最大值(与按不同字段排序的列表中的最后一个不同,我想要一个球员加入的最后一个球队,该球员可能加入了红军、a队、斑马队和扬基队,按时间顺序,我在找扬基队),这些帖子使用python/r按程序获得解决方案。我想用sql来做这个。
获取spark中组的最后一个值
查找sparkDataframe中每组的最大行数
mm5n2pyu2#
您可以根据上的排序指定行号
data_lots
如果要获取其最后一个值: