R tidyquery如何在已有AND条件的SQL中新增日期BETWEEN筛选条件
报错原因
你的代码触发警告并返回空数据框,核心原因是数据框中Actual date列为字符串类型,tidyquery将SQL的BETWEEN语句转换为dplyr的between()函数执行时,字符串与日期格式的边界值比较发生类型不匹配,强制转换过程中生成NA值,最终没有符合筛选条件的记录。
解决方案
方案1:提前转换日期列类型(推荐)
先将原数据的Actual date列转为日期类型,再执行查询即可正常筛选:
# 转换日期列格式 data$`Actual date` <- as.Date(data$`Actual date`) # 执行修改后的SQL查询 new_data <- query("SELECT `Actual date`, `Order Number`, Category, COUNT_DISTINCT (`Order Number`) AS tran_count, SUM (Quantity) AS items_purchased FROM data WHERE Category LIKE 'Flavour%' AND `Actual date` BETWEEN '2021-01-01' AND '2021-01-31' GROUP BY `Actual date`, `Order Number`, Category")
方案2:查询过程中转换日期类型
如果不想修改原数据的列类型,可以在SQL语句中对Actual date做日期转换后再比较:
new_data <- query("SELECT `Actual date`, `Order Number`, Category, COUNT_DISTINCT (`Order Number`) AS tran_count, SUM (Quantity) AS items_purchased FROM data WHERE Category LIKE 'Flavour%' AND DATE(`Actual date`) BETWEEN '2021-01-01' AND '2021-01-31' GROUP BY `Actual date`, `Order Number`, Category")
注意事项
如果Actual date列包含时分秒的时间信息,需要使用as.POSIXct()(对应方案1)或DATETIME()(对应方案2)做时间类型转换,避免时间部分被截断导致筛选结果不符合预期。
内容的提问来源于stack exchange,提问作者AdilK
相关产品推荐
相关产品推荐

