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