开发者社区> 问答> 正文

关于mapjoin的问题


select /* + mapjoin(a) */
    A.artist_id,A.ds,datediff(day,max(tianchi_songs.publish_time),A.ds) as timediff
from (select artist_id,play,ds
from predicttable2
where action_type=1)A  JOIN  tianchi_songs
on  A.artist_id=tianchi_songs.artist_id and  tianchi_songs.publish_time<= A.ds
运行类似这样的代码,都会报错,不是很懂啊,看一天了,能不能请教下mapjoin应该怎么写?  on中不等值连接应该怎么写?
FAILED: ODPS-0130071:Semantic analysis exception - E xpression not in GROUP BY key : line 2:0 'ds' 还有一点不明白 select语句中 from tianchi_user_action, tianchi_songs 这样居然也报错odps sql 不支持的么?

展开
收起
唐吉 2016-07-08 00:59:07 5792 0
3 条回答
写回答
取消 提交回答
  • 1.max聚合函数,需把select中其他不聚合的字段,放到group by里 2. datediff的字段,需转换为datetime类型

    2021-03-31 19:21:45
    赞同 展开评论 打赏
  • dateiff 里不能调用max吧,先把max求出来,在用dateiff 试试
    2016-07-08 23:26:12
    赞同 展开评论 打赏
  • Re关于mapjoin的问题
    试了下,我重新写了

    select A.artist_id,A.Ds,datediff(A.Ds,max(tianchi_songs.publish_time),'dd') as timediff
    from (select artist_id,play,Ds
    from predicttable2
    where action_type=1)A  join tianchi_songs
    on A.artist_id=tianchi_songs.artist_id
    where tianchi_songs.publish_time <= A.Ds
    group by A.artist_id,A.Ds
    但是还是报错 Semantic analysis exception - E xpression not in GROUP BY key : line 2:0 'ds'
    一个个试过去 好像是datediff这个函数的问题,  谁能给我指出这部分哪有问题吗?SQL中是能运行的

    -------------------------

    回 2楼junkang的帖子
    经过尝试 datediff(to_date(A.Ds,'yyyymmdd'),to_date(max(tianchi_songs.publish_time),'yyyymmdd'),'dd')
    需要手动转换数据类型
    2016-07-08 10:47:47
    赞同 1 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载