NSFetchRequest:获取多个项目的最大值

时间:2017-09-16 17:26:14

标签: ios core-data group-by nspredicate nsfetchrequest

我无法为获取多个项目的最大值的获取创建正确的谓词。场景:

实体:成绩

属性: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”时才会得到正确的结果,但我需要所有等级的所有字段。当我列出上面示例中的其他字段时,我偶尔会为每个学生获得多个成绩 - 具体取决于分组值。

我当时显然可以获得最新一年级的第一排学生,但这对于大量学生来说效率低下。

有什么建议吗?

0 个答案:

没有答案