輸出日期下面應該是不錯的SQL Server 2008R2 ...
IF OBJECT_ID('tempdb..#Tab', 'U') IS NOT NULL
DROP TABLE #Tab;
CREATE TABLE #Tab (
Local_Patient_Identifier VARCHAR(70),
NHS_Number VARCHAR(70),
GMP VARCHAR(70),
Practice_Code_GP VARCHAR(70),
CDS_Date DATE
);
INSERT #Tab (Local_Patient_Identifier, NHS_Number, GMP, Practice_Code_GP, CDS_Date) VALUES
('A111111111', '8BFD000', 'G111111', 'N77777', '2016-05-23'),
('A111111111', '8BFD000', 'G222222', 'N77777', '2016-06-13'),
('A111111111', '8BFD000', 'G222222', 'N77777', '2016-06-13'),
('A111111111', '8BFD000', 'G3333333', 'ZZ44444', '2017-02-09'),
('A111111111', '8BFD000', 'G3333333', 'ZZ44444', '2017-03-06'),
('A111111111', '8BFD000', 'G3333333', 'ZZ44444', '2017-03-15'),
('A111111111', '8BFD000', 'G3333333', 'ZZ44444', '2017-03-29'),
('A111111111', '8BFD000', 'G3333333', 'ZZ44444', '2017-05-10'),
('A111111112', '8BFD002', 'G3333332', 'JJ44444', '2015-05-21'),
('A111111112', '8BFD002', 'G3333332', 'KK44445', '2016-05-02'),
('A111111112', '8BFD002', 'G3333332', 'WW44444', '2017-02-13');
-- SELECT * FROM #Tab t
--======================================================================
IF OBJECT_ID('tempdb..#ChangeData', 'U') IS NOT NULL
DROP TABLE #ChangeData;
WITH
cte_AddRN AS (
SELECT
t.Local_Patient_Identifier,
t.NHS_Number,
t.GMP,
t.Practice_Code_GP,
t.CDS_Date,
RN = ROW_NUMBER() OVER (PARTITION BY t.Local_Patient_Identifier, t.GMP, t.Practice_Code_GP ORDER BY t.CDS_Date)
FROM
#Tab t
)
SELECT
ar.Local_Patient_Identifier,
ar.NHS_Number,
ar.GMP,
ar.Practice_Code_GP,
ar.CDS_Date,
RN = ROW_NUMBER() OVER (PARTITION BY ar.Local_Patient_Identifier ORDER BY ar.CDS_Date)
INTO #ChangeData
FROM
cte_AddRN ar
WHERE
ar.RN = 1;
-- SELECT * FROM #ChangeData cd
SELECT
cd1.Local_Patient_Identifier,
cd1.NHS_Number,
cd1.GMP,
cd1.Practice_Code_GP,
StartDate = cd1.CDS_Date,
EndDate = cd2.CDS_Date
FROM
#ChangeData cd1
LEFT JOIN #ChangeData cd2
ON cd1.Local_Patient_Identifier = cd2.Local_Patient_Identifier
AND cd1.RN = cd2.RN - 1;
結果.. 。
Local_Patient_Identifier NHS_Number GMP Practice_Code_GP StartDate EndDate
------------------------ ---------- -------- ---------------- ---------- ----------
A111111111 8BFD000 G111111 N77777 2016-05-23 2016-06-13
A111111111 8BFD000 G222222 N77777 2016-06-13 2017-02-09
A111111111 8BFD000 G3333333 ZZ44444 2017-02-09 NULL
A111111112 8BFD002 G3333332 JJ44444 2015-05-21 2016-05-02
A111111112 8BFD002 G3333332 KK44445 2016-05-02 2017-02-13
A111111112 8BFD002 G3333332 WW44444 2017-02-13 NULL
發生第4行至第8排什麼窗函數導?爲什麼這些行不是輸出的一部分? –
@KannanKandasamy每當一個人改變GP,他們都會改變。當前的GP結束日期將爲空。GP是GMP列 – JonWay
因此,如果'GMP'改變或'Practice_code_GP改變',那應該引發一個新的時期? – Xedni