2

我有两个正在尝试构建的视图。View #1 仅返回一组推荐数据,条件是推荐起源于过去 14 天(以及一些其他条件)。这已经完成。

第二种,视图 #2,必须返回过去 14 天内有推荐的客户的所有相关推荐(来自视图 #1 的推荐),但必须限制在推荐日期前不超过 60 天的视图中#1,不得包含来自视图 #1 的相同推荐,并且不能在来自视图 #1 的相关推荐之后产生相关推荐

查看#1:TP.INC_REFERRALS_V

所以基本上我想在第二个视图中为每个推荐放置一个日期条件,该推荐基于第一个视图中的推荐对应项。

到目前为止,我在查询结束时的条件是:

... WHERE TP.PROSPECT.PROSPECT_ID IN ((SELECT TP.INC_REFERRALS_V.REFERRAL_TABLE_PROS_ID FROM TP.INC_REFERRALS_V)) --这将标识符(prospect_id)与第一个视图(tp.inc_referrals_v)匹配以返回所有相关的推荐

AND TP.REFERRAL_V.REFERRAL_ID NOT IN (SELECT TP.INC_REFERRALS_V.REFERRAL_ID FROM TP.INC_REFERRALS_V) -- 这不包括已在第一个视图中返回的推荐

AND...-- 需要其他标准的逻辑。

建议?

第一个视图的查询如下。第三个视图将是完全相同的格式,但条件不同..(这是我遇到问题的部分)

查看#1

    SELECT TP.REFERRAL_V.REFERRAL_ID,
TP.REFERRAL_V.PROSPECT_ID AS REFERRAL_TABLE_PROS_ID,  
TP.PROSPECT.PROSPECT_ID,    
TP.PROSPECT.SEARCH_NAME AS CUSTOMER_PROSPECT_NAME,  
TP.PROSPECT.CUSTOMER_ID,  
TP.PROSPECT.CUSTOMER_SINCE,  
TP.PROSPECT.IS_BUSINESS,  
TP.PRODUCT_ML_INFO.PRODUCT_CODE,  
TP.PRODUCT_ML_INFO.PRODUCT_ID,  
TP.REGION_ML_INFO.REGION_DESCRIPTION,  
CASE WHEN (TP.REFERRAL_V.PRODUCT_ID) IS NULL THEN
TP.PRODUCT_CATEGORY_ML_INFO.PROD_CAT_DESCRIPTION ELSE 
TP.PRODUCT_ML_INFO.PRODUCT_DESCRIPTION END AS PROD_CAT_NAME,
TP.REFERRAL_V.PROD_CATEGORY_ID,  
(VXUZ.FIRST_NAME || ' ' || VXUZ.LAST_NAME)    AS CREATED_BY,
(VXU2.FIRST_NAME || ' ' || VXU2.LAST_NAME) AS ASSIGN_TO,
CASE WHEN (TP.REFERRAL_V.REFERRAL_STATUS) = '2'   
THEN TP.REFERRAL_V.CREDIT_LOCATION_NAME ELSE LCX1.LOCATION_NAME END AS   ASSIGN_TO_COST_CENTER,  
     EXU2.EMPLOYEE_NUMBER AS ASSIGN_TO_EMP_NUM,
    CXZ1.CODE_TEXT AS STAGE,  
  TP.CODE.CODE_TEXT AS STATUS, 
  TP.REFERRAL_EXTENSION_V.EXTENDED_DATETIME2 AS SOLD_DATE,    
TP.REFERRAL_V.CREATED_WHEN AS ORIGINATION_DATE,  
FROM TP.REFERRAL_V  
(joins removed - too many to list)  
WHERE VXU4.USER_ID <> VXU2.USER_ID  
   AND TRUNC(TP.REFERRAL_V.CREATED_WHEN) BETWEEN TRUNC(SYSDATE - 14) AND TRUNC(SYSDATE)

查看 1 个结果

Referral_id    Origination_Date   Prospect_ID
        2001              29-NOV-12             A1
        2002              02-DEC-12             A2
        2003              07-DEC-12             A3

View2 结果(应该是这样的):

Referral_id   Origination_Date   Prospect_ID
        1995              01-NOV-12             A1  
        1993              25-OCT-12             A2  
        1994              20-OCT-12             A2
        1990              17-OCT-12             A2  
        1989              10-NOV-12             A3  

正如您在 View2 结果中看到的那样,结果应包括 View1 中涉及的“prospect_ids”的所有相关引用,但不应包含 60 天前的任何日期,也不应包括视图 1 本身的结果。

4

1 回答 1

1

这个样子怎么样?

SELECT DISTINCT referralID, r.origination_date, r.prospectID, min_dt
FROM referralV r INNER JOIN
(
    SELECT prospectID, min(origination_date) AS min_dt
    FROM referralv
    WHERE origination_date >= dateadd(d,-14,getdate())
    GROUP BY prospectID
) p ON
r.prospectID = p.prospectid
WHERE
  origination_date < dateadd(d,-14,getdate()) AND
  origination_date >= dateadd(d,-60,min_dt)


CREATE TABLE [referralv](
    [referralID] [int] NOT NULL,
    [origination_date] [datetime] NOT NULL,
    [prospectID] [char](2) NOT NULL
) ON [PRIMARY];

INSERT INTO [referralv]([referralID],[origination_date],[prospectID]) VALUES
           (2001,'29-NOV-12','A1');
INSERT INTO [referralv]([referralID],[origination_date],[prospectID]) VALUES
           (2002,'02-DEC-12','A2');
INSERT INTO [referralv]([referralID],[origination_date],[prospectID]) VALUES
           (2003,'07-DEC-12','A3');
INSERT INTO [referralv]([referralID],[origination_date],[prospectID]) VALUES
           (1995,'01-NOV-12','A1');
INSERT INTO [referralv]([referralID],[origination_date],[prospectID]) VALUES
           (1993,'25-OCT-12','A2');
INSERT INTO [referralv]([referralID],[origination_date],[prospectID]) VALUES
           (1994,'20-OCT-12','A2');
INSERT INTO [referralv]([referralID],[origination_date],[prospectID]) VALUES
           (1990,'17-OCT-12','A2');
INSERT INTO [referralv]([referralID],[origination_date],[prospectID]) VALUES
           (1989,'10-NOV-12','A3');

sqlfiddle

于 2012-12-10T19:36:38.337 回答