我想知道您是否可以提供帮助。我正在尝试使用data.table在R中复制这个MS Access SQL查询。查询是:将SQL查询转换为R中的data.table以进行分组
SELECT Tbl_X.code,
Min(Tbl_X.DateTime) AS MinOfDateTime,
Max(Tbl_X.EndDate) AS MaxOfEndDate
FROM Tbl_X
GROUP BY Tbl_X.code
HAVING (((Min(Tbl_X.DateTime)) < DateAdd("d",1,[Forms]![Frm_ControlPanel]![CalcDateFromForm])))
ORDER BY Min(Tbl_X.DateTime);
的HAVING
部分是过滤掉今天的日期的任何意见。
我的R代码里面是:
library(data.table)
...
events <- as.data.table(event_data)[DateTime < max(DateTime),]
[order(DateTime),
.(Code,
Min_event_date = min(DateTime),
Max_validity_date = max(EndDate)),
by = Code]
我基本上要为有它看到的第一个日期和终止日期基于它的第一个观察的代码可以出现在代码分组每个代码AA单观察每次激活多次。
所以从:
Code DateTime EndDate
A 2017-02-09 2017-04-09
A 2017-04-09 2017-06-09
A 2017-07-09 2017-09-09
B 2017-03-04 2017-05-11
B 2017-06-04 2017-08-13
要
Code DateTime EndDate
A 2017-02-09 2017-09-09
B 2017-03-04 2017-08-13
但是,我得到一个略低的总的数字,从SQL。所以我想知道,首先是我正在做什么复制SQL,以及这是否是最有效的方法。
如果你得到的是较低的#行,但每个代码只有一行,那么它必须是HAVING部分是Borked /错译的,对吗?你的代码看起来很好,除非你不需要'。(Code,'因为你已经从'by = Code'获得了它。如果你可以发布一个例子,它可能有助于将它放下。参见https:// stackoverflow。 com/questions/5963269/how-to-make-a-great-r-reproducible-example/28481250#28481250 – Frank
谢谢你,我认为Parfait的答案已经解决了它,我会努力做到可重复的,因为有> 200k行在数据库中:) – MrMonkeyBum