来自多个表的前10个不同值的问题

时间:2012-01-20 03:00:11

标签: sql oracle

我的应用程序有oracle后端。模式的设计使我将用户事务拆分为12个月度事务表...每个月一个。现在,我想检索在给定日期范围内访问过最多不同文档的前10位用户 我目前有一个查询,它为每个用户的文档执行countDistinct,按此计数的desc顺序排序,并从中选择前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 个答案:

答案 0 :(得分:2)

又是我了。
您可以将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 :(得分:1)

您可以制作一个视图,在所有12个表中执行union all。然后从视图中选择。