1

データベース内のテーブルの列の、自分の値に最も近い 10 個の値を見つけたいです。その列の値を並べ替えて、自分の値よりも小さい値または大きい値を 10 個見つけます。どうすればこれを行うことができますか 助けてくれてありがとう

4

1 に答える 1

1

HQLはをサポートしますORDER BY

どちらか

Query q = session.createQuery("from Table order by abs(value - :v) asc";
q.setXxx("v", myValue);         /* Xxx is Float or Long or Integer or... */
q.setMaxResults(10);
List<Table> l = q.list();

また

Query q1 = session.createQuery("from Table where value >= :v order by value asc";
q1.setXxx("v", myValue);         /* Xxx is Float or Long or Integer or... */
q1.setMaxResults(10);
List<Table> l1 = q1.list();
Query q2 = session.createQuery("from Table where value < :v order by value desc";
q2.setXxx("v", myValue);         /* Xxx is Float or Long or Integer or... */
q2.setMaxResults(10);
List<Table> l2 = q2.list();
/* now find the 10 nearest elements in Java code */
...
while (...) {
   ...
}

2番目の例では、2つの選択で合計20行が表示され、Javaコードで最も近い10行を見つける必要がありますが、値列にデータベースインデックスがある場合は、はるかに高速になる可能性があります。結果は両方の例で同じになります。

于 2012-11-12T07:35:05.290 に答える