5

derby データベースのみで 10 件のレコードを取得したいと考えています。私はそれを行うためのチュートリアルを探しています:

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

最後にwhere を使用して最初にデータを 10 に制限できますが、問題は、節rownum <= 10 を使用してデータが順序付けられていないため、10 個のランダムなデータを取得したことです。order by

order byデータが与える前に置くとrownum

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 を使用することです。最初に内部にrow_numberを追加し、それを次のレイヤーのwhereで使用します。誰でも助けることができますか?Derby はサポート制限ではありません。最初に 10 件のレコードを注文する他の方法はありますか?

4

2 に答える 2

10

私は研究してきましたが、このようにダービーで制限することがわかりました

FETCH FIRST 10 ROWS ONLY

しかし、ダービー 10.5 でサポートされていることを残念に思います。ダービー 10.4 バンドルとグラスフィッシュ 2.1 を使用しています。まだ 10.4 を使用している場合は、誰もがこれを手伝ってくれるかもしれません。

于 2012-07-05T06:50:49.053 に答える
1

"OVER() " 内で order by 句を指定できます。

OVER(order by effot desc) AS rownum
于 2012-07-04T07:32:24.290 に答える