下次请以可重现的形式提供您的输入。这次我已经在下面为你做了。另外,问题中的 SQL 代码有一个 SQLite 语法错误,我已在下面修复了该错误。
正确执行此操作的最简单方法是使用名称DATE
对于输出列,在这种情况下 sqldf 将认为它的类型与DATE
输入栏。 SQLite 没有日期和时间类型,因此在将 sqldf 与 SQLite 一起使用时,sqldf 无法知道返回的是日期时间。 sqldf 使用一些启发式方法进行猜测,例如刚才讨论的。
library(sqldf)
Lines <- "NAME,val1,val2,DATE
A,23.7228,0.5829,11/19/2014 8:17
A,23.7228,0.5829,11/12/2014 8:16"
Table <- read.csv(text = Lines, as.is = TRUE)
Table$DATE <- as.POSIXct(Table$DATE, format = "%m/%d/%Y %H:%M")
sqldf("SELECT DISTINCT NAME, val1, val2, MAX(DATE) DATE FROM 'Table'")
giving:
NAME val1 val2 DATE
1 A 23.7228 0.5829 2014-11-19 08:17:00
如果我们将 H2 与 sqldf 一起使用,那么我们就不会遇到这些问题,因为 H2 确实支持日期和时间类型,因此 sqldf 不必猜测。 SQL 查询的语法也与 H2 中一样工作。使用Table
data.frame如上所示:
library(RH2)
library(sqldf)
sqldf("SELECT DISTINCT NAME, val1, val2, MAX(DATE) DATE FROM Table")
gives:
NAME val1 val2 MAX(DATE)
1 A 23.7228 0.5829 2014-11-19 08:17:00