JPQL:选择一组n个最低/最高值

时间:2013-12-24 05:22:21

标签: select set max jpql min

我搜索了很多,问我的DBA / Java开发人员朋友,但没有找到满意的答案。 这是我的表(Showing only 3 columns) TBL_工作

Job_ID(auto increment PK|Job_posting_date| city|Already_applied_flag
------------------------------------------------------------------------
1                       |  1/1/2001   | Tezpur |

2                       |  1/1/2010   | Jakarta|   X(already applied) 
3                       |   1/1/2003  | Paris|

----Thousands of rows...

我的java程序每天从Jobs表中选择50个作业,然后将它们标记为已经应用,以便它不会再次应用于相同的作业。

问题是,该表不是根据job_posting_date排序的,但我的程序必须首先选择最新作业。 (当然,当我们继续运行它时,它将开始应用于OLD作业)

所以我的问题是:    我如何每天选择50个最新工作? 我正在考虑的解决方案

1) SELECT a row for MAX( Job_posting_date )
      apply to the job. Mark it as applied
            Repeat 50 times
          ----Extremely inefficient
2) Select ALL the Rows:
        Order by  (Job_posting_date)
            Pick the top 50
3) Somehow reorder the database table ? ( JOB_ID is a foreign key in other tables, so changing it won't be easy)

这似乎是一个常见的问题。我在这里错过了什么? 感谢

1 个答案:

答案 0 :(得分:0)

通常,关系数据库表中的行没有顺序(数据库细节除外)。订购结果在JPQL中完成,并通过Query.setMaxResults限制结果数量。例如:

String jpql = "SELECT j FROM Jobs ORDER BY jobPostingDate";
Query q = em.createQuery(jpql);
q.setMaxResults(50);