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

时间:2012-08-19 01:54:14

标签: sql oracle

我正在尝试对一组4000个帐户执行一些基本的客户细分/个人资料分析。

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

例如,使用情况查询将返回超过>的帐户子集上个月使用100小时。

我有这个帐户列表后,我想问一组不同的分析问题。

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

我的基本方法是:

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

    Select * From fooo
    where Account_ID in ('00001','00002','00003')
    
  5. 挑战在于客户群查询返回的结果超过1000个,因此我必须手动替换1000个不同批次的account_ID。由于Oracle SQL的1,000表达式限制,这是必需的。

    另一种方法是在配置文件查询中组合客户群查询,但这会使查询需要很长时间才能执行。

    SO。 问题是有一种有效的方法来创建和填充Oracle SQL中的临时表,我可以使用它来转储客户群查询结果,然后将这些结果抛出到配置文件查询中,以确保它们更有效地运行?

1 个答案:

答案 0 :(得分:0)

使用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 */
;