NSPredicate在给定值下获取属性的最大值

问题描述 投票:0回答:1

我有一个实体Update,它具有两个属性:dateamount。假设我在核心数据中有这些对象:

|       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 | ...

ios core-data subquery nspredicate nsexpression
1个回答
0
投票

我计算出这样的内容:

© www.soinside.com 2019 - 2024. All rights reserved.