Hive SQL查询不返回任何结果+ Sparklyr中的等效项

时间:2019-09-06 14:46:00

标签: dplyr hiveql sparklyr

数据如下:

ARTICLE_ID, ORDER_ID, ARTICLE_TIME
2567, 1112, 2019-01-16 20:40:00.0
2670, 1117, 2019-01-16 21:40:00.0
2569, 1112, 2019-01-16 20:45:00.0

假设我们有很多订单,每个订单包含几篇文章。 每篇文章都是在特定的时间article_time购买的,

我的问题是,从购买特定article_id开始,使所有具有article_time在-/ + 300s之间的商品成为大于或等于给定值的第一个商品。

假设我们要查找的值为66.5。

1-我们必须获得第一个值(article_id)大于66.5(此处为67) 2-我们采用发现值(67)t的时间戳,并对其进行过滤,这样我们就可以在此时间戳t内-/ + 300 s内购买所有商品

这是我尝试的查询,但未返回任何内容。

SELECT order_id, article_time as `time`, article_id as `article`
FROM  
   db.orders `a`
JOIN 
   (select order_id as `idd`, min(article_id)  as `minn` FROM db.orders   
   WHERE article_id>=66.5   
   AND category=1  
   GROUP BY order_id) `b`  
ON (order_id=idd AND a.article_time between b.minn-300 AND  b.minn+300)

我也尝试使用sparklyr创建它,但是我不知道如何在dyplr中进行类似的连接:

orders<- orders_tbl%>%
group_by(orders$order_id)%>%
arrange(orders$time)%>%
filter(...)

1 个答案:

答案 0 :(得分:0)

我们可以直接过滤而不是执行联接。

配置查询-

select order_id, article_id,article_time from db.orders
where article_time >= (from_unixtime(unix_timestamp(select article_time from db.orders where article_id = 66.5)-300)) 
and article_time < (from_unixtime(unix_timestamp(select article_time from db.orders where article_id = 66.5)+300));