JavaDB: получить упорядоченные записи в подзапросе - PullRequest
3 голосов
/ 20 мая 2011

У меня есть следующее «COMPANIES_BY_NEWS_REPUTATION» в моей базе данных JavaDB (это некоторые случайные данные просто для представления структуры)также.Репутация и дата привязаны к 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в подзапросе.Кто-нибудь может предложить рабочее решение моей проблемы, пожалуйста?

1 Ответ

1 голос
/ 02 июня 2011

Какую версию JavaDB вы используете?Согласно главе TableSubquery в документации JavaDB, подзапросы таблиц поддерживают order by и fetch 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 ..., чтобы получить компании, для которых нужно вычислить средние значения.

...