【问题标题】:Query using the results from another query使用另一个查询的结果进行查询
【发布时间】:2016-01-21 13:47:47
【问题描述】:

我正在尝试编写一个查询,该查询将根据另一个查询的结果生成一组结果。查询所需的所有数据都来自一个表,只是一组不同的查询条件。我不确定我要问的内容是否可以在单个查询中创建。

select OBJID, case_type, activity, TITLE, x_rev_esc_prim_reason, x_rev_esc_sec_reason, x_esc_third_reason, x_create_dt, x_update_dt, x_sales_rep 
    from table_case

上述查询的结果基本上从表中捕获了我需要的所有内容,但我需要减少数量或过滤返回的结果。

以下查询的结果是我需要的,以进一步减少上述查询的结果。此外,查询还需要以下查询结果中的 x_create_dt 大于上述查询结果中的 x_create_dt。

select OBJID, case_type, activity, TITLE, x_rev_esc_prim_reason, x_rev_esc_sec_reason, x_esc_third_reason, x_create_dt, x_update_dt, x_sales_rep 
    from table_case
    where case_type = 'Sales'
    and activity = 'DO'  

IMAGE OF THE SAMPLE DATA AND RESULTS

DB目前是Oracle10g

【问题讨论】:

  • 我认为样本数据和期望的结果将有助于解释您想要做什么。显而易见的问题是:为什么不直接使用第二个查询?
  • 第二个查询只会给我需要从第一个查询的结果中过滤掉的结果。我希望第一个查询只返回第二个查询的结果中存在的结果。我需要检查是否有一个新的 'OBJID' where case_type = 'Sales' 由同一个 x_sales_rep 创建,经过case_type = 'request' 已创建。
  • @Ron:您显然错过了 Gordon 的提示,即您应该展示示例数据和预期结果以说明您的想法。
  • 添加了样本数据和结果的图像。谢谢!

标签: sql join oracle10g


【解决方案1】:

您想要返回每个 sales_rep 的所有 case_type='request' 行,其中 x_create_date 早于同一 case_type='Sales' and activity='DO' 行中的最新 x_create_date 相同的 sales_rep

首先我们创建返回限定信息的查询:

SELECT sales_rep, MAX(x_create_date) AS latest_date
FROM table_case
WHERE case_type = 'Sales' 
  AND activity = 'DO'
GROUP BY sales_rep

您可以自行测试此查询,并验证它是否产生了所需的结果。

然后我们将这个查询嵌入到外部查询中,然后将两者连接起来,如下所示:

SELECT c.OBJID, c.case_type, c.activity, c.TITLE, 
    c.x_rev_esc_prim_reason, c.x_rev_esc_sec_reason, c.X_esc_third_reason, 
    c.x_create_dt, c.x_update_dt 
FROM table_case AS c
INNER JOIN (
    SELECT sales_rep, MAX(x_create_date) AS latest_date
    FROM table_case
    WHERE case_type = 'Sales' 
      AND activity = 'DO'
    GROUP BY sales_rep) AS q
ON c.sales_rep = q.sales_rep and q.latest_date > c.x_create_date
WHERE c.case_type = 'request'

【讨论】:

  • 谢谢!我添加了样本数据和结果的图像。
  • 好的,显然加入 OBJID 不是您想要的。但是查看查询 2 的结果以及您想要的结果,我无法辨别您是如何决定要在想要的结果中包含哪些行的。显然它不仅仅是基于x_create_date。需要解释一下吗?
  • 在我想要的结果中,我只想查看 case_type = 'request' 且 x_create_dt 小于 x_create_dt 的记录,并且来自记录中的相同 x_sales_rep(来自第二个查询)使用 case_type = 'sales'。很抱歉造成混乱。
  • 我在编辑中发现了case_type 条件,但没有发现sales_rep。但是当同一sales_rep有多个activity = 'DO'记录时,你想怎么办?
  • 在您的示例结果中,您可能正在使用该代表的最新记录 x_create_date。这是你需要的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 1970-01-01
相关资源
最近更新 更多