[jboss-user] [Persistence, JBoss/CMP, Hibernate, Database] - Help composing HQL query
sanches
do-not-reply at jboss.com
Mon Aug 3 07:13:13 EDT 2009
Hello all,
I am trying to compose a statement which will fetch the latest "active" row from the table.
If the table would contain:
=id=obj_id=timestamp=active
--------------------------------
=0===1==2009-01-01=true
=1===1==2009-01-03=true
=2===1==2009-01-05=false
Then I needed row with id==1.
Obviously, it's better to run this in single query.
I guess this is inevitable to employ GROUP BY clause, but I was not able to compose query which Hibernate would accept (I use HSQL as DB)
I must use MAX() aggregate function since I need the latest timestamp.
I must group by obj_id since there are many records for object with the same id.
Therefore, the following query would satisfy:
select o2 from Orders o2 inner join
| (select max(o1.timestamp), o1.obj_id from Orders o1
| WHERE o1.active=true GROUP BY o1.obj_id) as o3
| on o2.obj_id=o3.obj_id
But such query containing subquery isn't accepted.
All examples of subqueries on http://docs.jboss.org/hibernate/stable/core/reference/en/html/queryhql.html#queryhql-subqueries
- either generates one-column-tables and use IN
- or use subqueries which return single row and use equality test.
Subquery above may return more than one row, can not be single-column as I must use both MAX() and GROUP BY id.
I think join is only solution here, but can not find formula.
Thank you.
View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4247563#4247563
Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4247563
More information about the jboss-user
mailing list