繁体   English   中英

SQL:最大表达限制的解决方法

[英]SQL: Workaround for the maximum expression limit

我正在尝试对4000个帐户进行一些基本的客户细分/配置文件分析。

我想根据使用情况和使用期限对客户进行快速细分 从策略上讲,这意味着在Oracle SQL数据库中查询符合特定条件的Acocunt_ID。

例如,使用情况查询将返回在过去一个月中使用时间超过100小时的帐户子集。

拥有此帐户列表后,我想提出一组不同的配置问题。

例如,对于有超过100个小时的使用时间的客户:他们使用什么样的产品? 他们成为客户多长时间了? 推荐来源是什么?

我的基本方法是:

  1. 运行客户群查询
  2. 将每个细分的accountIds下载到Excel中
  3. 制定个人资料查询
  4. 使用以下结构为每个客户群运行概要文件查询:

     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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM