2012-07-04 1 views
5

Derbyデータベースでのみ10個のレコードを取得します。私が最後にどこrownum <= 10を使用して、最初の10にデータを制限することができDerbyデータベースでレコードグループを制限するためのSQL

select * from (select ROW_NUMBER() OVER() AS rownum,name,effort from (select name, effort from 
(select TBL_PROJECT_DETAIL.P_NAME as Name, sum(TBL_TIMESHEET.EFFORT) as effort from 
TBL_TIMESHEET join tbl_project_detail on TBL_TIMESHEET.PROJECT_ID = TBL_PROJECT_DETAIL.ID group by TBL_PROJECT_DETAIL.P_NAME) as New) 
as new2) 
as new3 
where rownum <= 10 

が、問題は、私は10を得たので、データが最初order by句を使用して順序付けされていないということです。私はそれを行うためのチュートリアルを探してきましたランダムデータ

データはrownumを与える前に、私はorder byを置く:

select * from (select ROW_NUMBER() OVER() AS rownum,name,effort from 
(select name, effort from 
(select TBL_PROJECT_DETAIL.P_NAME as Name, sum(TBL_TIMESHEET.EFFORT) as effort from 
TBL_TIMESHEET join tbl_project_detail on TBL_TIMESHEET.PROJECT_ID = TBL_PROJECT_DETAIL.ID group by TBL_PROJECT_DETAIL.P_NAME) 
as New) 
as new2 order by effot desc) 
as new3 where rownum <=10 

それがエラーを与えました。クエリの内部テーブルとして結果を再配置するとそのようなことはgroup byできませんが、derbyの要件はrow_numberを使用することです。最初にinnerにrow_numberを追加し、次のレイヤーでその位置を使用します。誰でも助けることができますか?ダービーはサポート制限ではありません。それ以外の方法で、私が注文したレコードを最初に10個まで取得できますか?

答えて

9

私が研究していると私は

FETCH FIRST 10 ROWS ONLY 

貧しい私を使用してダービーに制限するために、この のように見つかりましたそのダービー10.5でサポートし、私はダービー10.4を使用していますグラスフィッシュと一緒にバンドル2.1 私はまだ10.4のcuzを使用していれば、これを助けることができる誰もが私はあまりにもマイケルマイケル

+1

完全なクエリを与えることができます –

1

あなたが内部のORDER BY句を与えることができます "OVER()"

OVER(order by effot desc) AS rownum 
+2

ダービーはそれをサポートしていません:http://db.apache.org/derby/docs/10.7/ref/rreffuncrownumber.html –

+0

私は残念それは動作していません はい私は恐れることをサポートしていません まだまだエラー 私はダービーを使用して10.4 –

関連する問題