2016-04-27 54 views
4

我期待從以下兩個表格從SQL服務器的多個表兩個日期之間獲取記錄

得到記錄,如果存在未在交易的資格存在的記錄參與者SSN和EIN交易的地方ServiceDate在BenefitEffectiveDate和GracePeriodEndDate內。

對於給定的參與者SSN和EIN,對於具有不同計劃週期的資格表中的相同參與者可以有多個記錄。

例如在下面的腳本中,在合格表中存在兩個記錄,用於participantSSN = 645075498,並且這兩個記錄具有不同的BenefitEffectiveDate和GracePeriodEndDate,從此表中我們必須取最小的BenefitEffectiveDate和最大的GracePeriodEndDate。這意味着這個參與者的最低日期是2015年1月1日,最大日期是2018-01-01

現在在交易表中我有相同participantSSN = 645075498其中有交易日期是2016年2月10日這是秋天最低BenefitEffectiveDate和資格表最大GracePeriodEndDate對之間participantSSN = 645075498

我想記錄我的輸出participantSSN = 645075498

我怎樣才能實現呢?到目前爲止,我已經寫下了下面的查詢,它不會在輸出結果中給我participantSSN = 645075498。

這是我預期的結果

| Tid | TPAId | EIN | ParticipantSSN | ParticipantFirstName | ParticipantLastName | TPAParentTransactionId | TPATransactionId | ServiceDate | TransactionDate | Amt | 

| 118 | PayFlex | 54401 |  852258852 | GABRIEL    | BRYANT    |    45758201 |   55277801 | 2016-01-01 | 2016-01-02  | 15 | 
| 124 | PayFlex | 54407 |  420145857 | CAROLYN    | WOMAC    |    45758207 |   55277807 | 2016-03-15 | 2016-03-15  | 60 | 
| 125 | PayFlex | 54408 |  345658570 | THOMAS    | FAVELA    |    45758208 |   55277808 | 2016-03-16 | 2016-03-18  | 60 | 
| 126 | PayFlex | 54409 |  541575015 | BETTY    | DAVIS    |    45758209 |   55277809 | 2016-03-17 | 2016-03-20  | 60 | 
| 127 | PayFlex | 54410 |  541575015 | BETTY    | DAVIS    |    45758209 |   55277809 | 2016-03-17 | 2016-03-20  | 60 | 
| 128 | PayFlex | 54409 |  541575015 | BETTY    | DAVIS    |    45758210 |   55277809 | 2016-03-17 | 2016-03-20  | 60 | 
| 129 | PayFlex | 54409 |  541575016 | MANDY    | THOMPSON   |    45758211 |   55277810 | 2016-03-18 | 2016-03-20  | 80 | 
| 130 | PayFlex | 54409 |  541575018 | FRANCIS    | GRAYER    |    45758212 |   55277811 | 2016-03-19 | 2016-03-22  | 79 | 
| 122 | PayFlex | 54405 |  645075498 | MARY     | WILSON    |    45758205 |   55277805 | 2016-02-07 | 2016-02-10  | 100 | 

我目前的SQL查詢

SELECT ParticipantFirstName, ServiceDate, * 
FROM DebitCardTransaction d 
WHERE NOT EXISTS 
(
    SELECT 1 
    FROM Eligibility e 
    WHERE e.TPAId = d.TPAId 
     AND e.EIN = d.EIN 
     AND e.ParticipantSSN = d.ParticipantSSN 
    AND d.ServiceDate BETWEEN BenefitEffectiveDate AND GracePeriodEndDate 
) 

以上是我當前的查詢及以下的樣品創建表並插入樣本數據腳本

CREATE TABLE Eligibility(
EligibilityId  INTEGER PRIMARY KEY 
,TPAId    VARCHAR(7) 
,EIN     INTEGER 
,SubscriberId   INTEGER 
,ParticipantFirstName VARCHAR(9) 
,ParticipantLastName VARCHAR(9) 
,ParticipantSSN  INTEGER 
,BenefitEffectiveDate DATE 
,GracePeriodEndDate DATE 
); 

INSERT INTO Eligibility(EligibilityId,TPAId,EIN,SubscriberId,ParticipantFirstName,ParticipantLastName,ParticipantSSN,BenefitEffectiveDate,GracePeriodEndDate) VALUES (227,'PayFlex',54406,15857506,'TIM','HOPE',138764141,'1/1/2016','2/2/2017'); 
INSERT INTO Eligibility(EligibilityId,TPAId,EIN,SubscriberId,ParticipantFirstName,ParticipantLastName,ParticipantSSN,BenefitEffectiveDate,GracePeriodEndDate) VALUES (228,'PayFlex',54401,15857501,'BRIEL','BRYANT',852258851,'1/1/2016','2/2/2017'); 
INSERT INTO Eligibility(EligibilityId,TPAId,EIN,SubscriberId,ParticipantFirstName,ParticipantLastName,ParticipantSSN,BenefitEffectiveDate,GracePeriodEndDate) VALUES (229,'PayFlex',54402,15857502,'LISA','PEREZ',292225757,'1/1/2016','2/2/2017'); 
INSERT INTO Eligibility(EligibilityId,TPAId,EIN,SubscriberId,ParticipantFirstName,ParticipantLastName,ParticipantSSN,BenefitEffectiveDate,GracePeriodEndDate) VALUES (230,'PayFlex',54403,15857503,'ALEXANDER','JEFFERSON',643035714,'1/1/2016','2/2/2017'); 
INSERT INTO Eligibility(EligibilityId,TPAId,EIN,SubscriberId,ParticipantFirstName,ParticipantLastName,ParticipantSSN,BenefitEffectiveDate,GracePeriodEndDate) VALUES (231,'PayFlex',54404,15857504,'SHIRLEY','PEREZ',458250578,'1/1/2016','2/2/2017'); 
INSERT INTO Eligibility(EligibilityId,TPAId,EIN,SubscriberId,ParticipantFirstName,ParticipantLastName,ParticipantSSN,BenefitEffectiveDate,GracePeriodEndDate) VALUES (232,'PayFlex',54405,15857505,'MARY','WILSON',645075498,'1/1/2015','2/2/2016'); 
INSERT INTO Eligibility(EligibilityId,TPAId,EIN,SubscriberId,ParticipantFirstName,ParticipantLastName,ParticipantSSN,BenefitEffectiveDate,GracePeriodEndDate) VALUES (233,'PayFlex',54405,15857505,'MARY','WILSON',645075498,'1/1/2016','2/2/2018'); 



CREATE TABLE DebitCardTransaction(
Tid     INTEGER PRIMARY KEY 
,TPAId     VARCHAR(7) 
,EIN     INTEGER 
,ParticipantSSN   INTEGER 
,ParticipantFirstName VARCHAR(9) 
,ParticipantLastName VARCHAR(9) 
,TPAParentTransactionId INTEGER 
,TPATransactionId  INTEGER 
,ServiceDate   DATE 
,TransactionDate  DATE 
,Amt     INTEGER 
); 

INSERT INTO DebitCardTransaction(Tid,TPAId,EIN,ParticipantSSN,ParticipantFirstName,ParticipantLastName,TPAParentTransactionId,TPATransactionId,ServiceDate,TransactionDate,Amt) VALUES (118,'PayFlex',54401,852258852,'GABRIEL','BRYANT',45758201,55277801,'1/1/2016','1/2/2016',15); 
INSERT INTO DebitCardTransaction(Tid,TPAId,EIN,ParticipantSSN,ParticipantFirstName,ParticipantLastName,TPAParentTransactionId,TPATransactionId,ServiceDate,TransactionDate,Amt) VALUES (119,'PayFlex',54402,292225757,'LISA','PEREZ',45758202,55277802,'2/1/2016','2/2/2016',50); 
INSERT INTO DebitCardTransaction(Tid,TPAId,EIN,ParticipantSSN,ParticipantFirstName,ParticipantLastName,TPAParentTransactionId,TPATransactionId,ServiceDate,TransactionDate,Amt) VALUES (120,'PayFlex',54403,643035714,'ALEXANDER','JEFFERSON',45758203,55277803,'2/2/2016','2/3/2016',50); 
INSERT INTO DebitCardTransaction(Tid,TPAId,EIN,ParticipantSSN,ParticipantFirstName,ParticipantLastName,TPAParentTransactionId,TPATransactionId,ServiceDate,TransactionDate,Amt) VALUES (121,'PayFlex',54404,458250578,'SHIRLEY','PEREZ',45758204,55277804,'2/3/2016','2/5/2016',50); 
INSERT INTO DebitCardTransaction(Tid,TPAId,EIN,ParticipantSSN,ParticipantFirstName,ParticipantLastName,TPAParentTransactionId,TPATransactionId,ServiceDate,TransactionDate,Amt) VALUES (122,'PayFlex',54405,645075498,'MARY','WILSON',45758205,55277805,'2/7/2016','2/10/2016',100); 
INSERT INTO DebitCardTransaction(Tid,TPAId,EIN,ParticipantSSN,ParticipantFirstName,ParticipantLastName,TPAParentTransactionId,TPATransactionId,ServiceDate,TransactionDate,Amt) VALUES (123,'PayFlex',54406,138764141,'TIM','HOPE',45758206,55277806,'2/10/2016','2/11/2016',110); 
INSERT INTO DebitCardTransaction(Tid,TPAId,EIN,ParticipantSSN,ParticipantFirstName,ParticipantLastName,TPAParentTransactionId,TPATransactionId,ServiceDate,TransactionDate,Amt) VALUES (124,'PayFlex',54407,420145857,'CAROLYN','WOMAC',45758207,55277807,'3/15/2016','3/15/2016',60); 
INSERT INTO DebitCardTransaction(Tid,TPAId,EIN,ParticipantSSN,ParticipantFirstName,ParticipantLastName,TPAParentTransactionId,TPATransactionId,ServiceDate,TransactionDate,Amt) VALUES (125,'PayFlex',54408,345658570,'THOMAS','FAVELA',45758208,55277808,'3/16/2016','3/18/2016',60); 
INSERT INTO DebitCardTransaction(Tid,TPAId,EIN,ParticipantSSN,ParticipantFirstName,ParticipantLastName,TPAParentTransactionId,TPATransactionId,ServiceDate,TransactionDate,Amt) VALUES (126,'PayFlex',54409,541575015,'BETTY','DAVIS',45758209,55277809,'3/17/2016','3/20/2016',60); 
INSERT INTO DebitCardTransaction(Tid,TPAId,EIN,ParticipantSSN,ParticipantFirstName,ParticipantLastName,TPAParentTransactionId,TPATransactionId,ServiceDate,TransactionDate,Amt) VALUES (127,'PayFlex',54410,541575015,'BETTY','DAVIS',45758209,55277809,'3/17/2016','3/20/2016',60); 
INSERT INTO DebitCardTransaction(Tid,TPAId,EIN,ParticipantSSN,ParticipantFirstName,ParticipantLastName,TPAParentTransactionId,TPATransactionId,ServiceDate,TransactionDate,Amt) VALUES (128,'PayFlex',54409,541575015,'BETTY','DAVIS',45758210,55277809,'3/17/2016','3/20/2016',60); 
INSERT INTO DebitCardTransaction(Tid,TPAId,EIN,ParticipantSSN,ParticipantFirstName,ParticipantLastName,TPAParentTransactionId,TPATransactionId,ServiceDate,TransactionDate,Amt) VALUES (129,'PayFlex',54409,541575016,'MANDY','THOMPSON',45758211,55277810,'3/18/2016','3/20/2016',80); 
INSERT INTO DebitCardTransaction(Tid,TPAId,EIN,ParticipantSSN,ParticipantFirstName,ParticipantLastName,TPAParentTransactionId,TPATransactionId,ServiceDate,TransactionDate,Amt) VALUES (130,'PayFlex',54409,541575018,'FRANCIS','GRAYER',45758212,55277811,'3/19/2016','3/22/2016',79); 
+0

請發表預期結果。 –

+0

@FelixPamittan我在我的問題中更新了我的預期結果 – M005

+0

Mary爲什麼要在結果集中?她的最低「BenefitEffectiveDate」和最大「GracePeriodEndDate」之間有一筆交易。 –

回答

0

我認爲這是你所追求的;

SELECT 
d.Tid 
,d.TPAId 
,d.EIN 
,d.ParticipantSSN 
,d.ParticipantFirstName 
,d.ParticipantLastName 
,d.TPAParentTransactionId 
,d.TPATransactionId 
FROM DebitCardTransaction d 
LEFT JOIN (SELECT ParticipantSSN, MIN(BenefitEffectiveDate) BenefitEffectiveDate, MAX(GracePeriodEndDate) GracePeriodEndDate FROM #Eligibility GROUP BY ParticipantSSN) e 
ON d.ParticipantSSN = e.ParticipantSSN 
AND d.TransactionDate BETWEEN e.BenefitEffectiveDate AND e.GracePeriodEndDate 
WHERE e.ParticipantSSN IS NULL OR d.ParticipantSSN = 645075498 
ORDER BY d.Tid 

它給人的結果集,你已經問除了TID 122(瑪麗·威爾遜),不符合標準,因爲我理解他們。

+0

感謝您的回答,但我希望瑪麗威爾遜被納入我的結果集。 – M005

+1

你爲什麼要讓瑪麗威爾遜展示?你已經忍受了每個在其BenefitEffectiveDate和其GracePeriodEndDate之間具有TransactionDate的人。我已經解開了我的答案,這將得到瑪麗真正的有效和寬限期的日期,但她仍然會被壓制。瑪麗需要包含哪些特別的東西? –

+0

我剛剛更新了where子句以強制Mary進入結果集,我仍然有興趣瞭解爲什麼她需要包含在標準 –

相關問題