-1

我有两个表,main_table 和 staging_table,main_table 包含原始数据,而 staging_table 包含我必须与 main_table 数据一起添加的少数更新记录,为此我使用唯一 ID - PersonID和到达时间 -日期 下面是我能够在 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"' must be a aggregate expression or appear in GROUP BY 子句

4

1 回答 1

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这会选择最近日期的每一行。这些列来自最近的行。

于 2020-01-26T15:44:53.570 回答