我有一个表,我正在使用同一个表进行内部联接。这是表结构
Acct#|Name |Med_Rec|Admit Date
-----|-----|-------|----------
1 |MIKE |100 |7/1/2017
2 |MIKE |100 |7/2/2017
3 |MIKE |100 |7/3/2017
4 |CHRIS|101 |5/5/2017
5 |CHRIS|101 |5/7/2017
我的目标是在连续3天内获得录取日期的帐户(即迈克在2017年7月1日首先录取,然后第二天再次录取,也是第二天录取)。我的目标结果应该是这样的
Acct|Name |Admit_Date|Othr_Acct|Admit_Date
----|-----|----------|---------|-----------
1|MIKE |7/1/2017 | 2 |7/2/2017
1|MIKE |7/1/2017 | 3 |7/3/2017
4|CHRIS|5/5/2017 | 5 |5/7/2017
我面临的问题是我收到的查询结果再次选择了帐号。它不应再出现,因为我已在“Othr_Acct”
下列出它Acct|Name |Admit_Date|Othr_Acct|Admit_Date
----|-----|----------|---------|-----------
1|MIKE |7/1/2017 | 2 |7/2/2017
1|MIKE |7/1/2017 | 3 |7/3/2017
2|MIKE |7/2/2017 | 3 |7/3/2017<-wrong it was already selected
4|CHRIS|5/5/2017 | 5 |5/7/2017
SELECT
A.Acct
A.Name
A.Admit_Date
B.Acct AS Othr_Acct
B.Admit_Date
FROM
A.TABLE
B.TABLE
WHERE
A.Med_Rec=B.Med_Rec
AND B.Admit_Date-A.Admit_Date BETWEEN 0 AND 2
AND A.Acct<>B.Acct
答案 0 :(得分:0)
仅将表B连接到表A的第一行。
使用子查询和row_number
函数对A
SELECT
A.Acct,
A.Name ,
A.Admit_Date,
B.Acct AS Othr_Acct,
B.Admit_Date
FROM (
SELECT t.*,
row_number() over (partition by Med_Rec order by Admit_Date) As rn
FROM TABLE1 t
) a
JOIN TABLE1 b
ON A.rn = 1 AND A.Med_Rec=B.Med_Rec
AND B.Admit_Date-A.Admit_Date BETWEEN 0 AND 2
AND A.Acct<>B.Acct