2011-05-05 71 views
0

是否可以像在HQL中一樣表示此查詢(來自Postgres)或作爲hibernate標準查詢?選擇下一個位置

SELECT id, least(abs(gene_start - ?) , abs(gene_end - ?)) as div_pos 
FROM arraydata.gene WHERE chromosomeref = ? 
ORDER BY div_s LIMIT 1 

或者還有其他的方式來選擇一個條目旁邊的給定位置。如果表格中一個條目的開始或結束與查詢的距離最小。

回答

1

這玩意:

least(abs(gene_start - ?) , abs(gene_end - ?)) 

是不是可轉位的。我想你上了車gene_start和gene_end索引,所以你可以這樣做:

SELECT id, gene_start 
FROM arraydata.gene WHERE chromosomeref = ? 
WHERE gene_start > ? 
ORDER BY gene_start LIMIT 1 

SELECT id, gene_end 
FROM arraydata.gene WHERE chromosomeref = ? 
WHERE gene_end < ? 
ORDER BY gene_end DESC LIMIT 1 

你可以用UNION結合了。至於在Hibernate中表達它,不知道!

+0

謝謝,讓我在正確的方向。 – Medrod 2011-05-05 15:39:18