首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Join语句时间约束中的SQL相关子查询

Join语句时间约束中的SQL相关子查询
EN

Stack Overflow用户
提问于 2013-12-26 02:37:27
回答 1查看 2.1K关注 0票数 1

我有一个关于Teradata SQL的特定问题,我相信它有一个与相关子查询有关的答案……

基本上,在我工作的呼叫中心,每个座席都必须为他们接听的每个呼叫创建一个案例(在公司CRM中),并且每个案例都与一个帐户相关联。我需要获得一组代理为特定日期创建的所有案例,然后在接下来的3天内获得在这些帐户上创建的下一个案例(如果有)。基本上,我需要执行以下操作(请注意,无论创建者或帐号如何,所有案例都会被转储到同一个数据库中):

代码语言:javascript
复制
SELECT
  CASES.CASE_ID, CASES.CREATION_TIMESTAMP, CASES.ACCOUNT_NUMBER, CASES.AGENT_ID
FROM
  CASES
WHERE CREATION_DATE = {d '2013-12-01'} AND AGENT_ID IN ('aaaaa','bbbbb','ccccc')

并以某种方式为每个帐户上创建的下一个案例的案例ID和创建时间戳添加2列:

代码语言:javascript
复制
SELECT
  INITIAL_CASES.CASE_ID, INITIAL_CASES.CREATION_TIMESTAMP,
  INITIAL_CASES.ACCOUNT_NUMBER,
  INITIAL_CASES.AGENT_ID,
  REPEAT.CASE_ID, REPEAT.CREATION_TIMESTAMP
FROM
  CASES AS INITIAL_CASES
LEFT JOIN

  (SELECT
    ACCOUNT_NUMBER, MIN(CREATION_TIMESTAMP) 
   FROM CASES 
   WHERE CREATION_TIMESTAMP > INITIAL_CASES.CREATION_TIMESTAMP 
   AND CREATION_DATE >= {d '2013-12-01'} 
   AND CREATION_DATE <= {d '2013-12-04'}) REPEAT

ON INITAL_CASES.ACCOUNT_NUMBER = REPEAT_CASES.ACCOUNT_NUMBER
WHERE AGENT_ID IN ('aaaaa','bbbbb','ccccc')

一些问题是: 1)在我的代理创建案例后,可能没有或超过1个案例在同一帐户上创建,因此我需要使用MIN( CREATION_TS )和WHERE CREATION_TS> INITIAL_CREATION_TS的组合,但是需要为我的代理案例的初始结果集中的每一行执行此查询,因为它们都具有不同的时间戳。

EN

回答 1

Stack Overflow用户

发布于 2013-12-26 06:16:56

你可能不需要自连接,看起来你只是想要基于CREATION_TIMESTAMP的下一行数据(如果是在接下来的3天内),这很容易通过窗口聚合实现:

代码语言:javascript
复制
SELECT
  CASES.CASE_ID, CASES.CREATION_TIMESTAMP, CASES.ACCOUNT_NUMBER, CASES.AGENT_ID,
  CASE
    WHEN MIN(CREATION_DATE)
         OVER (PARTITION BY ACCOUNT_NUMBER 
               ORDER BY CREATION_TIMESTAMP
               ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) <= DATE '2013-12-04'
    THEN MIN(CASE_ID) 
         OVER (PARTITION BY ACCOUNT_NUMBER 
               ORDER BY CREATION_TIMESTAMP
               ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS next_CASE_ID,
  CASE
    WHEN MIN(CREATION_DATE) 
         OVER (PARTITION BY ACCOUNT_NUMBER 
               ORDER BY CREATION_TIMESTAMP
               ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) <= DATE '2013-12-04'
    THEN MIN(CREATION_TIMESTAMP) 
         OVER (PARTITION BY ACCOUNT_NUMBER 
               ORDER BY CREATION_TIMESTAMP
               ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS next_CREATION_TIMESTAMP
FROM
  CASES
WHERE CREATION_DATE = {d '2013-12-01'} AND AGENT_ID IN ('aaaaa','bbbbb','ccccc')
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20775694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档