配置单元联接查询引发错误

yc0p9oo0  于 2021-06-26  发布在  Hive
关注(0)|答案(4)|浏览(441)

如果一个用户id有多条记录,则根据事件时间戳保留最新记录。
我的配置单元查询:

SELECT 
 a.user_id,
 unix_timestamp(event_timestamp,'dd/MM/YYYY HH:MM') as  converted_event_timestamp,
 a.user_name,
 a.user_location
 FROM 
 sports_views a
 INNER JOIN
 (SELECT user_id,MAX(unix_timestamp(event_timestamp,'dd/MM/YYYY HH:MM')) as max_event_timestamp FROM sports_views GROUP BY user_id )b
 ON( a.user_id =b.user_id AND a.converted_event_timestamp =b.max_event_timestamp)
 LIMIT 10;

当我尝试运行这个配置单元查询时,我得到以下错误

SemanticException [Error 10002]: Line 8:43 Invalid column reference 'converted_event_timestamp'

有人能告诉我这个配置单元查询出了什么问题,我该如何解决这个问题吗?

mm9b1k5b

mm9b1k5b1#

我看到您在查询中将a.converted\u event\u timestamp命名为的位置。不能在联接中使用它,因为这可能是在select中的转换之前计算的。改为加入此 unix_timestamp(a.event_timestamp,'dd/MM/YYYY HH:MM')

nbysray5

nbysray52#

它不支持按别名联接。使用 unix_timestamp(event_timestamp,'dd/MM/YYYY HH:MM') 而不是在联接条件中,或者在子查询中计算它。

ON( a.user_id =b.user_id AND unix_timestamp(a.event_timestamp,'dd/MM/YYYY HH:MM')=b.max_event_timestamp)
q8l4jmvw

q8l4jmvw3#

从中选择a.user\u id、a.user\u name、a.user\u location
(从运动视图中选择一个.user\u id,unix\u timestamp(event\u timestamp,'dd/mm/yyyy hh:mm')作为转换的\u event\u timestamp,一个.user\u name,一个.user\u location)一个内部连接(选择user\u id,max(unix\u timestamp,event\u timestamp,'dd/mm/yyyy hh:mm'))作为“运动视图”组中的最大\u事件\u时间戳(按用户id)b on(a.user\u id=b.user\u id和a.converted\u事件\u时间戳=b.max\u事件\u时间戳)limit 10;

rqdpfwrv

rqdpfwrv4#

select a.userid, a.unix_timestamp(event_timestamp,'yyyy/MM/dd hh:MM') as min 
    from sports_views a 
    inner join (select userid, first_value(1) over(order by time desc) as max 
        from(select userid,unix_timestamp(event_timestamp,'yyyy/MM/dd hh:MM') as time 
        from sports_views)sv )e) 
where a.min=max

相关问题