2017-08-24 35 views
-1

我有两张客户和订单表,我想过滤出符合step1和step2需求的customer_id,而当我执行step2.5时,控制台显示当连接表时,r中的sqldf错误

Error: Cannot pass NA to dbQuoteIdentifier() 
In addition: Warning message: 
In field_types[] <- field_types[names(data)] : 
    number of items to replace is not a multiple of replacement length 

Table

第一步< - sqldf(“SELECT * FROM CUSTOMER_TABLE如克拉内部联接order_table如OT ON ct.customer_id = ot.customer_id 其中order_date的< 20161222和ORDER_AMOUNT = 1个 组由ct.customer_id;“)

step2<- sqldf("select ot.customer_id from order_table as ot 
       where order_date between 20161222 and 20170222 
       and order_amount=0 
       group by ot.customer_id;") 

step2.5<- sqldf("select * from step1 as s1 inner join step2 as s2 on s1.customer_id=s2.customer_id; ") 

有人可以帮助感谢

+2

您的查询充满错误。请解释你想要做什么,最好给我们一些示例表格数据。通常,在没有选择一个或多个列聚合的情况下做“GROUP BY”是没有意义的。你的'step2.5'几乎肯定会失败;你不能仅仅引用一个R查询结果集。 –

+0

@TimBiegeleisen,因为我想过滤出 –

+0

与第1步和第2步具有相同的customer_id –

回答

1

我不能复制任何错误?我对SQL进行了一些改进,但如果这不能解决您的问题,请在您的问题中以可重现的格式提供数据。

data(iris) 
customer_table <- iris 
order_table <- iris 

customer_table$customer_id <- 1:nrow(iris) 
order_table$customer_id <- 1:nrow(iris) 

customer_table$order_amount <- 1 
order_table$order_amount <- 0 
order_table$order_date  <- rep(c(20161221, 20161223)) 

step1 <- sqldf("select ct.* 
       from customer_table ct 
       join order_table ot on 
       ct.customer_id=ot.customer_id 
       where ot.order_date < 20161222 
       and ct.order_amount=1 
       group by ct.customer_id") 

step2 <- sqldf("select customer_id 
       from order_table 
       where order_date 
       between 20161222 and 20170222 
       and order_amount=0 
       group by customer_id") 

step2.5 <- sqldf("select * from step1 s1 
       join step2 s2 
       on s1.customer_id=s2.customer_id") 

这个概念验证创建一个没有错误的表。该表使用此示例数据正确地具有0行。

+1

谢谢,我将在稍后添加我的数据 –

+0

这就是我想要做的:选择客户客户表,在2016/12/22之前只进行一次购买;对于步骤1中的用户,筛选出在2016年12月22日和2017年2月22日之间没有购买任何东西的用户,即这组用户进入休眠状态3个月。 –

+0

@JeffHoffman我不明白为什么会出现错误。它确实必须是你的数据。请访问我对你的问题的评论链接,看看R标签需要什么样的可重复数据形式,例如dput() –