我想知道您是否可以提供幫助。我正在嘗試使用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