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