2

構築しようとしているビューが2つあります。ビュー#1は、紹介が過去14日間に発生したという条件(およびその他のいくつかの基準)を含む一連の紹介データを返すだけです。これで完了です。

2番目のビュー#2は、過去14日間に紹介された顧客の関連するすべての紹介(ビュー#1からの紹介)を返す必要がありますが、表示されている紹介日の60日以内に制限する必要があります#1には、ビュー#1からの同じ紹介を含めることはできません。また、ビュー#1からの関連する紹介の後に、関連する紹介を作成することはできません。

ビュー#1:TP.INC_REFERRALS_V

したがって、基本的には、1番目のビューの参照に基づく各参照の2番目のビューに日付条件を設定します。

これまでのところ、クエリ終了時の私の条件は次のとおりです。

... 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番目のビューのクエリは以下のとおりです。3番目のビューはまったく同じ形式ですが、条件が異なります。(これは私が問題を抱えている部分です)

ビュー#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)

View1の結果

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日前より前の日付は含まれておらず、View1自体に結果が含まれていてはなりません。

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 に答える