从SQL Server中的多个表获取两个日期之间的记录

M005

我希望从以下两个表中获取记录

如果交易的ServiceDate在BenefitEffectiveDate和GracePeriodEndDate内,则该交易的参与者SSN和EIN的资格中没有记录。

对于一个给定的参与者SSN和EIN,资格表中可能有针对同一参与者的多个记录,且记录计划不同。

例如,在下面的脚本中,资格表中有参与者SSN = 645075498的两条记录,并且两条记录都有不同的BenefitEffectiveDate和GracePeriodEndDate,从此表中我们必须获取最小的BenefitEffectiveDate和最大的GracePeriodEndDate。这表示该参与者的最短日期为2015年1月1日,最大日期为2018年1月1日

现在在交易表中我具有相同的参与者SSN = 645075498,交易日期为2016-02-10,介于参与者SSN = 645075498资格表中的最小BenefitEffectiveDate和最大GracePeriodEndDate之间

我想在我的参与者的输出中获得记录SSN = 645075498

我该如何实现?到目前为止,我已经在下面的查询中编写了以下查询,该查询未在输出结果中给我参与者SSN = 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);
里奇·本纳

我想这就是你所追求的;

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(玛丽·威尔逊)除外,据我所知,它不符合标准。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在两个日期之间从Sql中的表中获取记录

来自分类Dev

SQL Server查找两个日期之间的记录

来自分类Dev

SQL Server:查找两个日期之间的记录

来自分类Dev

获取两个表之间的丢失记录数(SQL Server 2012)

来自分类Dev

获取SQL Server中两个日期之间的所有日期

来自分类Dev

获取 SQL Server 中不包括星期五的两个日期之间的日期差异

来自分类Dev

从SQL Server获取两个日期之间的数据

来自分类Dev

两个 SQL Server 表之间的多个 FOREIGN KEY

来自分类Dev

从SQL中的两个表中获取记录数

来自分类Dev

SQL获取月份在表中两个日期之间的名称

来自分类Dev

sql server:同时在两个表中插入多个记录

来自分类Dev

如何获取SQL Server中两个日期之间的月份和年份的列表

来自分类Dev

SQL查询从两个表中获取不同的记录

来自分类Dev

SQL查询从两个表中获取不同的记录

来自分类Dev

在SQL Server中的两个日期条件之间

来自分类Dev

SQL Server中两个日期之间的月份差异

来自分类Dev

在SQL Server中的两个日期条件之间

来自分类Dev

SQL Server中两个日期之间的天数

来自分类Dev

忽略两个表sql server中存在的记录

来自分类Dev

Oracle SQL。获取两个日期之间的日期

来自分类Dev

sql在两个小时之间获取可用记录

来自分类Dev

将两个按查询分组在一起以获取sql server中两个表的记录数

来自分类Dev

SQL Server 查询以获取两个日期之间的工作日数,不包括假期

来自分类Dev

两个表之间的SQL SELECT按日期联接

来自分类Dev

检查两个日期之间的日期或sql中的NULL

来自分类Dev

SQL语句获取两个日期之间的差

来自分类Dev

SQL获取两个日期之间的工作日数

来自分类Dev

获取两个日期之间的季度列表(SQL)

来自分类Dev

SQL Server中两个单独的表中的两列之间的差异

Related 相关文章

  1. 1

    如何在两个日期之间从Sql中的表中获取记录

  2. 2

    SQL Server查找两个日期之间的记录

  3. 3

    SQL Server:查找两个日期之间的记录

  4. 4

    获取两个表之间的丢失记录数(SQL Server 2012)

  5. 5

    获取SQL Server中两个日期之间的所有日期

  6. 6

    获取 SQL Server 中不包括星期五的两个日期之间的日期差异

  7. 7

    从SQL Server获取两个日期之间的数据

  8. 8

    两个 SQL Server 表之间的多个 FOREIGN KEY

  9. 9

    从SQL中的两个表中获取记录数

  10. 10

    SQL获取月份在表中两个日期之间的名称

  11. 11

    sql server:同时在两个表中插入多个记录

  12. 12

    如何获取SQL Server中两个日期之间的月份和年份的列表

  13. 13

    SQL查询从两个表中获取不同的记录

  14. 14

    SQL查询从两个表中获取不同的记录

  15. 15

    在SQL Server中的两个日期条件之间

  16. 16

    SQL Server中两个日期之间的月份差异

  17. 17

    在SQL Server中的两个日期条件之间

  18. 18

    SQL Server中两个日期之间的天数

  19. 19

    忽略两个表sql server中存在的记录

  20. 20

    Oracle SQL。获取两个日期之间的日期

  21. 21

    sql在两个小时之间获取可用记录

  22. 22

    将两个按查询分组在一起以获取sql server中两个表的记录数

  23. 23

    SQL Server 查询以获取两个日期之间的工作日数,不包括假期

  24. 24

    两个表之间的SQL SELECT按日期联接

  25. 25

    检查两个日期之间的日期或sql中的NULL

  26. 26

    SQL语句获取两个日期之间的差

  27. 27

    SQL获取两个日期之间的工作日数

  28. 28

    获取两个日期之间的季度列表(SQL)

  29. 29

    SQL Server中两个单独的表中的两列之间的差异

热门标签

归档