我期待从以下两个表格从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);
请发表预期结果。 –
@FelixPamittan我在我的问题中更新了我的预期结果 – M005
Mary为什么要在结果集中?她的最低“BenefitEffectiveDate”和最大“GracePeriodEndDate”之间有一笔交易。 –