gpt4 book ai didi

subquery - Makumba 列表按子集排序

转载 作者:行者123 更新时间:2023-12-04 05:55:44 27 4
gpt4 key购买 nike

假设我们有以下 Student.mdd:

person=not null ptr general.Person
interests=set general.ActivityField
education=set
education->university=not null ptr general.University
education->graduation=date

我想列出所有对绘画感兴趣的学生(where="interests.name='painting'"),并按最近的毕业日期排序。

如果我简单地使用 orderBy="student.education.graduation desc",则只会使用第一个创建的教育进行排序。例如:
  • Student1就读于A大学,2009年6月毕业
  • Student2 2010年6月就读B大学
  • Student3 2010年5月考入C大学,2011年5月考入D大学,2011年5月毕业

  • 所以我希望让他们像这样排序:
  • Student3(2011 年 5 月)
  • 学生 2(2010 年 6 月)
  • 学生 1(2009 年 6 月)

  • 但我明白了:
  • 学生 2(2010 年 6 月)
  • Student3(2010 年 5 月)
  • 学生 1(2009 年 6 月)

  • 有没有办法强制 makumba 为每个学生检查所有“教育”项目,按“毕业”对它们进行排序并使用最新日期对学生进行排序?

    最佳答案

    您很可能需要使用子查询来解决这个问题。让我在这里概述一种方法(现在在纯 OQL 中,需要针对 JSP 标记库进行调整)

    先做对比,先选择有限人数

    SELECT p, p.name, e.graduation from Student s, s.person p, s.education e 
    WHERE p.name='name1' or p.name='name2'
    ORDER BY p.name, e.graduation DESC

    如果人们有不止一项研究,这显然会给你重复;如果你想按一个人分组以减少重复,你不能选择最新的日期。我想,这就是你在你的例子中隐含地做的事情。

    因此,您需要以某种方式进行限制,只为每个学生选择具有最新毕业日期的教育,然后在该列表中进行排序。
    例如,这可以实现:
    SELECT p, p.name, e.graduation from Student s, s.person p, s.education e
    WHERE (p.name='name1' or p.name='name2')
    AND e.graduation in
    (SELECT max(e2.graduation) from Student s2, s2.education e2 where s=s2)
    ORDER BY e.graduation DESC

    这会在子查询中为学生选择最新的毕业日期,然后在主查询中仅选择毕业日期最高的教育。

    鉴于,如果您有一个学生的两项研究在同一日期结束,您可能会从中获得重复项。所以添加一个
     'group by s'

    可能需要。

    关于subquery - Makumba 列表按子集排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9539632/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com