我的应用程序有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
}
每个月的类似表格..
答案 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
。然后从视图中选择。