【问题标题】:SYNTAX_ERROR: '"LastName"' must be an aggregate expression or appear in GROUP BY clauseSYNTAX_ERROR: '"LastName"' 必须是聚合表达式或出现在 GROUP BY 子句中
【发布时间】:2020-01-26 15:38:33
【问题描述】:

我有两个表,main_table 和 staging_table, main_table 包含原始数据,而 staging_table 包含我必须与 main_table 数据一起添加的少数更新记录,为此我使用唯一 id -PersonID 和到达时间 - date强> 下面是我可以在 SQL 中执行的查询

SELECT PersonID, LastName, FirstName, Address, City, max(date) 
from 
(
select PersonID, LastName, FirstName, Address, City, date from main_table
UNION
select PersonID, LastName, FirstName, Address, City, date from staging_table
) as t
GROUP by t.PersonID;

但在 AWS Athena 中执行时,我收到以下错误, SYNTAX_ERROR: '"LastName"' 必须是聚合表达式或出现在 GROUP BY 子句中

【问题讨论】:

  • 样本数据和预期结果将阐明您想要完成的工作。

标签: sql amazon-web-services group-by amazon-athena pyathena


【解决方案1】:

我怀疑其他列可能有所不同,您实际上想要最近日期的完整记录。如果是这种情况,请使用row_number()

select p.*
from (select p.*,
             row_number() over (partition by personid order by date desc) as seqnum
      from ((select PersonID, LastName, FirstName, Address, City, date
             from main_table
            ) union all
            (select PersonID, LastName, FirstName, Address, City, date
             from staging_table
            )
           ) p
     ) p
where seqnum = 1;

这会在PersonId 中选择最近日期的一行。这些列来自最近的行。

【讨论】:

  • 谢谢,这就是我要找的。​​span>
猜你喜欢
  • 2019-10-16
  • 2013-11-05
  • 1970-01-01
  • 2013-08-06
  • 2015-08-14
  • 2018-05-16
  • 1970-01-01
相关资源
最近更新 更多