У меня есть сущность Update
, которая имеет два атрибута: date
и amount
. Предположим, у меня есть эти объекты в Базовых данных:
| Date | Amount |
|------------+--------|
| 2020-01-01 | 100 |
| 2020-01-05 | 200 |
| 2020-01-10 | 300 |
| 2020-01-15 | 400 |
Моя цель состоит в том, чтобы получить объект с самой поздней датой до указанной даты. Например, если задана дата 2020-01-12, результатом должен быть объект, дата которого 2020-01-10. Интересно, возможно ли это сделать с одним NSPredicate?
Я пробовал следующее, но это не работает, потому что max () не знает о других ограничениях (см. Раздел здесь )
request.predicate = NSPredicate(format: "date < %@ AND date == max(date)", given_date as CVarArg)
Я также подумал о SUBQUERY, потому что это подход к этому в SQL. Но, к сожалению, кажется, что SUBQUERY в Core Data предполагается использовать с двумя таблицами (для этого требуется явный аргумент коллекции).
Я прочитал документ NSExpression, но, насколько я могу судить, определить невозможно NSExpression, чтобы сделать это либо (приведенная выше строка формата NSPredicate, которую я пробовал, на самом деле является NSExpression в строковом формате, поэтому они используют один и тот же max ()).
Означает ли это, что мне нужно выбрать несколько записей с NSPredicate(format: "date < %@", given_date as CVarArg)
сначала, а затем запустить второй предикат, чтобы получить последний? Но разве это не неэффективно, потому что он выбирает несколько записей, хотя мне нужна только одна? Спасибо за любые предложения.
Примечание : я рассмотрел установку fetchLimit
на 1. Но это не работает в моих случаях, потому что может быть несколько объектов с одной датой, и я хочу чтобы получить их все, если их даты соответствуют требованию.