德比数据库中限制记录组的sql

Posted

技术标签:

【中文标题】德比数据库中限制记录组的sql【英文标题】:sql for limit record group by in derby database 【发布时间】:2012-07-04 07:21:50 【问题描述】:

我只想在 derby 数据库中检索十条记录。我一直在搜索教程:

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 rownum &lt;= 10 最后将数据限制为 10,但问题是数据不是首先使用 order by 子句排序的,所以我得到了 10 个随机数据。

当我把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 并在下一层中使用它。任何人都可以帮忙吗?德比不受支持限制。有什么其他方法可以让我先订购 10 条记录吗?

【问题讨论】:

【参考方案1】:

我一直在研究,发现是这样的 使用

限制德比
FETCH FIRST 10 ROWS ONLY

但可怜的我支持 derby 10.5 并且我正在使用 derby 10.4 捆绑包和 glassfish 2.1 如果我仍然使用 10.4,任何人都可以提供帮助,因为我太害怕迁移了

【讨论】:

你能提供完整的查询【参考方案2】:

您可以在“OVER()”中给出 order by 子句

OVER(order by effot desc) AS rownum

【讨论】:

没有。 Derby 不支持:db.apache.org/derby/docs/10.7/ref/rreffuncrownumber.html 我很抱歉那不起作用是不支持我担心它仍然错误我正在使用 derby 10.4

以上是关于德比数据库中限制记录组的sql的主要内容,如果未能解决你的问题,请参考以下文章

SQL:查找每组的最大记录[重复]

SQL:查找每组的最大记录[重复]

分区组的SQL运行余额计算

SQL查询:返回组的最大值记录

怎么用sql语句获取每一组的第一条记录(包括所有字段,不是单个字段)

德比足球_德比数据__国足世界杯卡塔尔