проблема с 10 лучшими значениями из нескольких таблиц - PullRequest
1 голос
/ 20 января 2012

У меня есть оракул для моего приложения. Схема разработана таким образом, что пользовательские транзакции разбиты на 12 таблиц ежемесячных транзакций ... по одной на каждый месяц. Теперь я хочу получить 10 лучших пользователей, которые обращались к наибольшему количеству отдельных документов в заданном диапазоне дат.
В настоящее время у меня есть запрос, который выполняет countDistinct для документов для каждого пользователя, сортирует их в порядке убывания и выбирает 10 лучших результатов из этого.
Я запускаю этот запрос для каждой таблицы, и все результаты добавляются в список. Я должен отсканировать этот список и сделать сумму по ежемесячному счету, а затем сгруппировать по user_id, чтобы получить итоговые документы для каждого пользователя за все 12 месяцев.
Я понял, что этот счет не является правильным, поскольку один и тот же пользователь может получать доступ к одним и тем же документам в разные месяцы. с моей текущей логикой эти подсчеты будут суммироваться.

Мне нужно знать, какую стратегию мне следует использовать, чтобы результат был наиболее точным. Я знаю, что один из способов - это запрос из одной таблицы, что, безусловно, даст мне правильный ответ, но могу ли я достичь такого же результата от запроса всех 12 таблиц?

вот примерная месячная таблица за январь

class TxnSummJan {
    Long id 
    Transaction trans
    Users grauser
    Resources graresource
    Integer transactioncount
    Date lastaccesseddate
    Date currentdate 
    String accountid
    String userlocation

    String documentname

    String eventdesc
    }

Похожие таблицы за каждый месяц ..

Ответы [ 2 ]

2 голосов
/ 20 января 2012

это снова я.
Не могли бы вы применить UNION ALL ко всем 12 таблицам и затем сделать это в виде?

SELECT
  documentname,
  user,
  accesscount
  --and other columns
FROM
(
    SELECT 
      documentname,
      user,
      accesscount
      --and other columns
    FROM
      txn_jan

    UNION ALL

    SELECT 
      documentname,
      user,
      accesscount
      --and other columns
    FROM
      txn_feb

    --and other monthly summary tables

) yearly_summary
1 голос
/ 20 января 2012

Вы можете создать представление, которое делает union all для всех 12 таблиц.Затем выберите из вида.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...