首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按子集排序的Makumba列表

按子集排序的Makumba列表
EN

Stack Overflow用户
提问于 2012-03-02 20:02:49
回答 1查看 103关注 0票数 2

假设我们有以下Student.mdd:

代码语言:javascript
复制
person=not null ptr general.Person
interests=set general.ActivityField
education=set
  education->university=not null ptr general.University
  education->graduation=date

我想列出所有对绘画感兴趣的学生(where=“利害关系:名字=‘绘画’”),并按最近的毕业日期对名单进行排序。

如果我只使用orderBy="student.education.graduation desc",那么只会使用第一个创建的教育来进行排序。例如:

  • Student1于2009年6月进入A大学,
  • Student2于2010年6月进入B大学,并于2010年6月毕业
  • Student3于2010年5月进入C大学并于2010年5月毕业于D大学并于2011年5月毕业

所以我希望像这样把它们分类:

2011)

  • Student2
  1. Student3 (2009年6月2010)
  2. Student1 )

但我明白了:

2010)

  • Student3
  1. Student2 (2009年5月2010)
  2. Student1 )

有没有办法强迫makumba对每个学生进行所有的“教育”项目,按“毕业”进行排序,并使用最新的日期对学生进行排序?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-02 21:30:19

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

首先要比较,首先选择人数有限的人。

代码语言:javascript
复制
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

如果人们有一个以上的研究,这显然会给你提供重复;如果你想按一个人分组以减少重复,你不能选择最新的日期。我认为,这就是你在你的例子中暗含的行为。

因此,你需要在某种程度上限制只为每个学生选择最新毕业日期的教育,然后在名单上进行排序。例如,可以实现这样的目标:

代码语言:javascript
复制
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

它为子查询中的学生选择最新的毕业日期,然后在主查询中只选择具有最高毕业日的教育。

如果你有一个学生在同一天结束两项研究,你可能会从中得到副本。因此,添加一个

代码语言:javascript
复制
 'group by s'

可能是需要的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9539632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档