gpt4 book ai didi

sql - JavaDB:在子查询中获取有序记录

转载 作者:行者123 更新时间:2023-12-02 04:09:16 24 4
gpt4 key购买 nike

我的 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 绑定(bind)。

我需要做的是计算每家公司最近 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。有人可以为我的问题提出一个可行的解决方案吗?

最佳答案

您使用的是哪个版本的 JavaDB?根据章节TableSubquery在 JavaDB 文档中,表子查询确实支持 order byfetch next ,至少在版本 10.6.2.1 中。

鉴于可以对子查询进行排序并且可以限制结果集的大小,以下(未经测试的)查询可能会执行您想要的操作:

select COMPANY, (select avg(REPUTATION) 
from (select REPUTATION
from COMPANY_BY_NEWS_REPUTATION
where COMPANY = TR.COMPANY
order by DATE desc
fetch first 5 rows only))
from (select distinct COMPANY
from COMPANY_BY_NEWS_REPUTATION) as TR

此查询从 COMPANY_BY_NEWS_REPUTATION 中检索所有不同的公司名称。 ,然后检索每家公司最后五个信誉行的平均值。我不知道它是否会充分发挥作用,这可能取决于您的数据集的大小以及您拥有的索引。

如果您在另一个表中有唯一的公司名称列表,您可以使用它来代替 select distinct ...子查询来检索要计算平均值的公司。

关于sql - JavaDB:在子查询中获取有序记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6064817/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com