2011-02-22 3 views
2

J'ai un domaine, TransactionCompteHQL: résultat max/limite basée sur la valeur de la propriété

class AccountTransaction { 
    Account account 
    BigDecimal amount 
    ... 
} 

Je voudrais obtenir les derniers maximum de 3 opérations de chaque compte. Résultats escomptés:

id | account | amount 
______________________ 
1 | a1  | 200 
21 | a1  | 300 
33 | a1  | 100 
11 | a2  | 100 
22 | a2  | 30 
31 | a2  | 10 
55 | a3  | 20 

Comment dois-je écrire HQL/requête de critères pour la même chose? Est-ce vraiment supporté?

+0

Comment le faites-vous avec SQL? – Medrod

Répondre

1

J'ai créé une colonne date_created pour travailler avec les opérations lastest

SQL:

select id, account, amount 
from account_transaction as at1 
where (
    select count(*) from account_transaction as at2 
    where at1.account_id = at2.account_id and at1.date_created < at2.date_created 
) <= 2; 

HQL:

AccountTransaction.executeQuery("select id, account, amount from AccountTransaction as at1 
where (select count(*) from AccountTransaction as at2 
where at1.account = at2.account and at1.date_created > at2.date_created) <= 2") 
+0

Merci un million! ça a juste marché. Juste utilisé id au lieu de dateCreated i.e at1.id

0

Je ne pense pas que vous devez utiliser HQL/critères pour obtenir ceci:

AccountTransaction.list(max: 3, sort: 'amount', order: 'desc') 
+0

Cela donnera trois entrées avec le montant le plus élevé. Mais il fera une liste avec trois entrées avec le montant le plus élevé pour chaque compte. – Medrod

Questions connexes