【发布时间】:2011-05-19 20:58:42
【问题描述】:
我的 JavaDB 数据库中有以下“COMPANIES_BY_NEWS_REPUTATION”(这是一些随机数据,仅用于表示结构)
COMPANY | NEWS_HASH | REPUTATION | DATE
-------------------------------------------------------------------
Company A | 14676757 | 0.12345 | 2011-05-19 15:43:28.0
Company B | 454564556 | 0.78956 | 2011-05-24 18:44:28.0
Company C | 454564556 | 0.78956 | 2011-05-24 18:44:28.0
Company A | -7874564 | 0.12345 | 2011-05-19 15:43:28.0
一个 news_hash 可能与多个公司相关,而一个公司也可以与多个 news_hash 相关。声誉和日期与 news_hash 绑定。
我需要做的是计算每家公司最近 5 条新闻的平均声誉。为了做到这一点,我觉得我需要在子查询中使用“order by”和“offset”,如下面的代码所示。
select COMPANY, avg(REPUTATION) from
(select * from COMPANY_BY_NEWS_REPUTATION order by "DATE" desc
offset 0 rows fetch next 5 row only) as TR group by COMPANY;
然而,JavaDB 既不允许 ORDER BY 也不允许在子查询中使用 OFFSET。有人可以为我的问题提出一个可行的解决方案吗?
【问题讨论】:
-
你如何计算平均声誉?它是所有元组的平均值还是最后 5 个值的平均值
-
假设子查询是可以接受的,这意味着您只能获得该信誉表中的最后 5 行,这可能意味着公司 A 有 4 个数据点,B 有 1 个数据点,C 没有数据点(假设这是最后 5) - 那么 A 的 avg(Reputation) 超出 4 个数据点,B 超出 1,C 则没有?
-
是的,你是对的,即使查询被接受,它也不会返回我需要的...
标签: sql sql-order-by subquery offset javadb