我无法为获取多个项目的最大值的获取创建正确的谓词。场景:
实体:成绩
属性:StudentId,成绩,GivenOn(日期),状态
目标:获取学生ID列表时,请检索每个学生的最新成绩(以及每个成绩行所需的其他成绩属性)。
限制条件 :( 1)学生可以有0,1或者更多年级,(2)每个学生必须返回一个结果,如果有多个,则返回最新成绩(3) )我无法访问学生实体,因此我无法使用关系来获取成绩。
这是我不成功的尝试:
let studentIDs = ["101", "102", "103", ...]
let fetch = NSFetchRequest<GradeModel>(entityName: "GradeModel")
fetch.predicate = NSPredicate(
format: "student_id IN %@", studentIDs)
fetch.resultType = .dictionaryResultType
// get latest grade - grouped by student-id
let maxExpression = NSExpression(format: "max:(givenOn)")
let givenOnEx = NSExpressionDescription()
givenOnEx.expression = maxExpression
givenOnEx.name = "maxGivenOn"
givenOnEx.expressionResultType = .dateAttributeType
fetch.propertiesToFetch = [givenOnEx, "student_id", "grade", "status"]
fetch.propertiesToGroupBy = ["student_id", "grade", "status"]
fetch.sortDescriptors = [
NSSortDescriptor(key: "given_on", ascending: false)
]
只有在“propertiesToFetch”/“propertiesToGroupBy”中列出“student_id”时才会得到正确的结果,但我需要所有等级的所有字段。当我列出上面示例中的其他字段时,我偶尔会为每个学生获得多个成绩 - 具体取决于分组值。
我当时显然可以获得最新一年级的第一排学生,但这对于大量学生来说效率低下。
有什么建议吗?