Sql 多个表中前10个不同值的问题

Sql 多个表中前10个不同值的问题,sql,oracle,Sql,Oracle,我的应用程序有oracle后端。该模式设计为将用户事务拆分为12个月事务表。。每月一次。现在,我想检索在给定日期范围内访问过最多不同文档的前10名用户。 我目前有一个查询,它对每个用户的文档进行countDistinct,按此计数的desc顺序排序,并从中选择前10个结果。 我在每个表上运行这个查询,所有结果都附加在一个列表中。我必须扫描此列表,每月计算一次总数,然后按用户id分组,以获得所有12个月内每个用户的文档总数。 我意识到这个计数不正确,因为同一个用户在不同的月份可能访问相同的文档。根

我的应用程序有oracle后端。该模式设计为将用户事务拆分为12个月事务表。。每月一次。现在,我想检索在给定日期范围内访问过最多不同文档的前10名用户。
我目前有一个查询,它对每个用户的文档进行countDistinct,按此计数的desc顺序排序,并从中选择前10个结果。
我在每个表上运行这个查询,所有结果都附加在一个列表中。我必须扫描此列表,每月计算一次总数,然后按用户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
    }

每个月都有类似的表。

您可以创建一个视图,该视图对所有12个表进行
联合。然后从视图中选择。

又是我。
您能否将
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

如果我正确理解OP,就不会有重复,因为不同的表表示事务集合的不相交子集。因此,您应该使用
UNION ALL
而不是
UNION
,这样数据库就不会浪费时间检查重复项。因此,对于12个表,“按用户选择不同的文档名称,在日期之间分组”的联合,创建视图,然后再次按用户分组计数(文档名称)?@pri dev您需要创建一个如上所述的视图,然后只执行
选择不同的文档..
@David Wallace同意,性能问题是一个值得关注的问题。我想我可能想尝试比较查询单亲表和12个表的并集视图的性能。。