Если вы выполняете подзапрос для действительных brewery_ids, вы можете присоединиться к этому списку. Например:
SELECT br.name brewery_name, ibu, AVG(ibu) OVER (PARTITION BY
b.brewery_id ORDER BY ibu DESC)
FROM beers b
JOIN (
SELECT brewery_id
FROM beers
GROUP BY brewery_id
HAVING COUNT(DISTINCT ibu) >= 5
) X ON X.brewer_id = b.brewery_id
JOIN breweries br ON b.brewery_id = br.brewery_id
WHERE ibu IS NOT NULL
Хорошая вещь в таком запросе - вы можете запустить подзапрос, чтобы проверить, ограничен ли он нужными идентификаторами. Затем просто добавьте его в свой запрос.
Получить заархивированный URI, соответствующий a NSManagedObject
objectID
:
NSManagedObject* myMO;
...
NSURL *uri = [[myMO objectID] URIRepresentation];
NSData *uriData = [NSKeyedArchiver archivedDataWithRootObject:uri];
Для возвращения к экземпляру исходного управляемого объекта Вам нужен стек CoreData с персистентным хранилищем, содержащим тот экземпляр, уже добавленный к NSPersistentStoreCoordinator
. Затем:
NSData *uriData;
NSPersistentStoreCoordinator *psc;
NSManagedObjectContext *moc; //with moc.persistentStoreCoordinator = psc.
...
NSURL *uri = [NSKeyedUnarchiver unarchiveObjectWithData:uriData];
NSManagedObjectID *moID = [psc managedObjectIDForURIRepresentation:uri];
NSManagedObject *myMO = [moc objectWithID:moID];
Вы смотрели на URIRepresentation? Легко преобразовать NSURL в NSString и это к NSData.
Из документации NSManagedObjectID:
Идентификаторы объектов могут быть преобразованы в представление URI, которое может быть заархивировано и воссоздано позже, чтобы вернуться к данному объекту (использующий managedObjectIDForURIRepresentation: (NSPersistentStoreCoordinator) и objectWithID: (NSManagedObjectContext). Например, последняя выбранная группа в приложении могла быть сохранена в пользовательских значениях по умолчанию через идентификатор объекта группы. Можно также использовать идентификатор объекта представления URI для хранения “слабых” отношений через персистентные хранилища (где никакое твердое соединение не возможно).
Просто превратите, это в URL затем превращает это в строку или данные.
Вам не нужно преобразовывать NSURL в NSString перед архивированием. Просто заархивируйте NSURL.
Изменить: я недавно узнал, что идентификатор объекта может измениться, например, после миграции. Поэтому кажется не очень хорошей идеей сохранять идентификатор на диск, ожидая, что впоследствии можно будет ссылаться на объект.