Создание значений отведений для группы с помощью dbplyr - PullRequest
0 голосов
/ 08 февраля 2019

Мои данные содержат данные о спаривании коров. Мне нужно создать значения отведений для переменной даты на группу, потому что я хочу агрегировать количество спариваний между двумя датами отела.

Мой код отлично работает с локальными данными.Однако база данных растет, и нет смысла извлекать все данные локально и запускать код.Я пытаюсь использовать dbplyr для отправки своего кода на сервер.Однако это приводит к неинформативной ошибке.

Вот фрагмент моего кода:

agrosql <- getSQLdata(id=27)

calf <- tbl(agrosql,"T_Animal_Calvings")

# Sort on chronolgically per animal
calf <- arrange(calf,AnimalID,CalvingDate)

# Create lead calving date
calf %<>% 
  group_by(AnimalID) %>%
  mutate(leadcalf=lead(CalvingDate)) 

Сообщение об ошибке:

Error: <SQL> 'SELECT  TOP 11 "MatingID", "CalvingID", "AnimalID", "AnimalServerID", "AnimalNo", "SortAnimalNo", "MatingDate", "MatingDateDT", "MatingType", "MatingTypeName", "MatingTime", "MatingEndDate", "MatingEndDateDT", "BullAnimalID", "BullName", "BullRegistrationId", "EmbryoMotherAnimalID", "EmbryoMotherName", "EmbryoMotherRegistrationId", "IsSexed", "IsOwnStock", "ChargeNo", "DosisQuantity", "EventCommentAbbr", "StaffMatingRelationID", "StaffMatingShortName", "StaffMatingRelationType", "StaffMatingRelationTypeName", "HasAssumedFlush", "ConceptionDate", "ConceptionDateDT", "ServiceNo", "NextMatingID", "LastPregnantDate", "LastPregnantDateDT", "FirstNotPregnantDate", "FirstNotPregnantDateDT", "IsMatingWithFlushing", "IsMatingWithEmbryoImplant", "IsMatingWithFertilityAbortion", LEAD("MatingDate", 1, NULL) OVER (PARTITION BY "AnimalID" ORDER BY "AnimalID", "MatingDate") AS "leadai"
FROM (SELECT *
FROM "T_Animal_Matings"
ORDER BY "AnimalID", "MatingDate") "mztkpapjhp"'
 nanodbc/nan

1 Ответ

0 голосов
/ 26 марта 2019

Как структурирован ваш SQL-запрос, у вас есть подзапрос, содержащий оператор ORDER BY.SQL не принимает ORDER BY в подзапросах.

Предложение ORDER BY связано с использованием вами функции dplyr arrange.

Если вы хотите применить ордер к задержке/ Lead вы делаете это внутри команды LAG / Lead.Попробуйте следующее:

calf %>% 
  group_by(AnimalID) %>%
  mutate(leadcalf = lead(CalvingDate,
                         order_by = c("calf", "AnimalID", "CalvingDate"))
...