编辑:当我第一次回答这个问题时,我假设结果应该是原始表中彼此相隔 45 天内的记录。我现在已经包含了 Tim Sand 答案的 SQL Server 实现(一个没有自连接的),以防将来有人需要 SQL Server 版本。我认为值得说明的是,如果表中需要除 pat_id 之外的任何数据,则需要加入表中才能获取它。
DECLARE @PatientVisits TABLE
(
VisitID INT PRIMARY KEY IDENTITY
,Pat_ID VARCHAR(5)
,Date DATETIME2
,Prov_ID VARCHAR(5)
)
INSERT INTO @PatientVisits
VALUES
('A' ,'05/12/2012' ,'X1')
,('A' ,'05/12/2012' ,'X2')
,('B' ,'11/12/2012' ,'X1')
,('B' ,'11/20/2012' ,'X1')
,('B' ,'01/12/2013' ,'X1')
,('B' ,'03/22/2013' ,'X1')
,('C' ,'04/25/2013' ,'X1')
,('C' ,'04/25/2013' ,'X2')
,('C' ,'04/27/2013' ,'X1')
,('C' ,'05/12/2013' ,'X1')
,('C' ,'05/22/2013' ,'X2')
,('C' ,'04/25/2012' ,'X3');
SELECT DISTINCT
Pat_ID
FROM
(
SELECT
Pat_ID
,Date AS CurrentDate
,LAG (Date,3,'00:00') OVER ( PARTITION BY Pat_ID ORDER BY Date ASC ) AS DateThreeVisitsAgo
FROM @PatientVisits
) Visits
WHERE
DATEDIFF(DAY,DateThreeVisitsAgo,CurrentDate) <= 45
这是我原来的答案:
DECLARE @PatientVisits TABLE
(
VisitID INT PRIMARY KEY IDENTITY
,Pat_ID VARCHAR(5)
,Date DATETIME2
,Prov_ID VARCHAR(5)
)
INSERT INTO @PatientVisits
VALUES
('A' ,'05/12/2012' ,'X1')
,('A' ,'05/12/2012' ,'X2')
,('B' ,'11/12/2012' ,'X1')
,('B' ,'11/20/2012' ,'X1')
,('B' ,'01/12/2013' ,'X1')
,('B' ,'03/22/2013' ,'X1')
,('C' ,'04/25/2013' ,'X1')
,('C' ,'04/25/2013' ,'X2')
,('C' ,'04/27/2013' ,'X1')
,('C' ,'05/12/2013' ,'X1')
,('C' ,'05/22/2013' ,'X2')
,('C' ,'04/25/2012' ,'X3');
SELECT
VisitID
,Pat_ID
,Date
,Prov_ID
FROM
(
SELECT
P.VisitID
,P.Pat_ID
,P.Date
,P.Prov_ID
,COUNT(*) OVER (PARTITION BY P.VisitID) AS NearVisitCount
FROM @PatientVisits P
JOIN @PatientVisits P2
ON P.Pat_ID = P2.Pat_ID
AND P.Date BETWEEN DATEADD(DAY,-45,P2.Date) AND DATEADD(DAY,45,P2.Date)
) Visits
WHERE
NearVisitCount >= 4
GROUP BY
VisitID
,Pat_ID
,Date
,Prov_ID
结果:
VisitID Pat_ID Date Prov_ID
7 C 2013-04-25 X1
8 C 2013-04-25 X2
9 C 2013-04-27 X1
10 C 2013-05-12 X1
11 C 2013-05-22 X2