[英]SQL: Workaround for the maximum expression limit
我正在尝试对4000个帐户进行一些基本的客户细分/配置文件分析。
我想根据使用情况和使用期限对客户进行快速细分 。 从策略上讲,这意味着在Oracle SQL数据库中查询符合特定条件的Acocunt_ID。
例如,使用情况查询将返回在过去一个月中使用时间超过100小时的帐户子集。
拥有此帐户列表后,我想提出一组不同的配置问题。
例如,对于有超过100个小时的使用时间的客户:他们使用什么样的产品? 他们成为客户多长时间了? 推荐来源是什么?
我的基本方法是:
使用以下结构为每个客户群运行概要文件查询:
Select * From fooo where Account_ID in ('00001','00002','00003')
挑战在于,客户群查询返回的结果超过1000个,因此我必须手动替换1000个集合中不同批次的account_IDs。这是必需的,因为Oracle SQL的表达式限制为1000个。
另一种选择是将客户细分查询与概要文件查询组合在一起,但这会使查询需要一定的执行时间。
所以。 问题是,有没有一种有效的方法可以在Oracle SQL中创建和填充临时表,我可以使用该表来转储客户群查询结果,然后将这些结果放入概要文件查询中,以确保它们更有效地运行?
将使用ROW_NUMBER()窗口聚合函数根据AccountID的ASCENDING顺序分配RowID,然后使用WHERE子句处理n个可接受的行:
SELECT DT1.*
FROM (SELECT f1.*
, ROW_NUMBER() OVER (ORDER BY F1.AccountID) AS RowID_
FROM foo f1
) DT1
WHERE DT1.RowID_ BETWEEN 1 and /* n */
;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.