我有一个实体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()不了解其他约束(请参见讨论here),因此无法正常工作)>
request.predicate = NSPredicate(format: "date < %@ AND date == max(date)", given_date as CVarArg)
我还考虑了SUBQUERY,因为这是在SQL中执行此操作的方法。但是不幸的是,似乎核心数据中的SUBQUERY应该与两个表一起使用(它需要一个显式的集合参数)。
我已经阅读了NSExpression文档,但据我所知,也不可能定义NSExpression来做到这一点(我尝试过的上述NSPredicate格式字符串实际上是字符串格式的NSExpression,因此它们使用相同的max()) 。
这是否意味着我必须先使用NSPredicate(format: "date < %@", given_date as CVarArg)
获取多个条目,然后运行第二个谓词以获取最新的条目?但这不是低效率的,因为尽管我只需要一个条目就可以获取多个条目吗?
我想念什么吗?感谢您的任何建议。
注
:我考虑过将fetchLimit
设置为1。但这在我的情况下不起作用,因为可能有多个具有相同日期的对象,如果它们的日期满足要求,我希望将它们全部获取。 。我有一个实体更新,它具有两个属性:日期和金额。假设我在核心数据中有这些对象:日期金额| | ------------ + -------- | | 2020-01-01 | 100 | | 2020-01-05 | ...
我计算出这样的内容: