我有一個放射性肺結節事件的放射學報告數據庫。每名患者都有一個醫療記錄號,每個程序都有一個唯一的登錄號。因此,MRN可以爲不同的程序提供多個登錄號。登記號碼是遞增的,所以如果患者有多個登錄號碼,最大的登錄號碼是最新的程序。我需要:SQL中的相關子查詢
- 找出最老的(最初的)研究
- 查找該inital
- 後談到最快的一次研究,計算各區間
我相信這個問題之間的時間差可以使用相關的子查詢來解決。但是,我還沒有足夠的SQL來解決這個問題。我試過自己加入表格並找到每個子查詢的最大加入。下面的一些示例代碼來製作數據集:
CREATE TABLE Stack_Example (Rank, Accession1, MRN1, Textbox2, Textbox47,Textbox43,Textbox45,ReadBy,SignedBy,Addendum1,ReadDate,SignedDate,Textbox49,Result,Impression,max_size_nodule, max_nodule_loc, max_nodule_type)
INSERT INTO Stack_Example
VALUES ("10", "33399", "001734", "5/21/1965", "CTS", "3341", "ROUTINE", "TUCK, YOURPANTSIN", "COMB, YAHAIR", "YES", "12/19/2014 11:48", "12/19/2014 17:50", "TEXT", "Results of Nodules!","Impressions of Nodules","3.0", "right middle lobe","None Found")
INSERT INTO Stack_Example
VALUES ("9", "33104", "001734", "5/21/1965", "CTS", "3341", "ROUTINE", "TUCK, YOURPANTSIN", "PICK, YASELFUP", "YES", "12/21/2013 06:52", "01/21/2014 06:52", "TEXT", "Results of Nodules!","Impressions of Nodules","3.7", "right upper lobe","None Found")
INSERT INTO Stack_Example
VALUES ("9", "33374", "001734", "5/21/1965", "CTS", "3341", "ROUTINE", "TUCK, YOURPANTSIN", "PICK, YASELFUP", "YES", "01/21/2014 08:19", "01/21/2014 06:52", "TEXT", "Results of Nodules!","Impressions of Nodules","2.1", "right lower lobe","None Found")
INSERT INTO Stack_Example
VALUES ("1", "34453", "001734", "5/21/1965", "CTS", "3341", "ROUTINE", "TUCK, YOURPANTSIN", "PICK, YASELFUP", "YES", "03/14/2014 09:14", "03/14/2014 09:14", "TEXT", "Results of Nodules!","Impressions of Nodules","1.4", "left upper lobe","None Found")
INSERT INTO Stack_Example
VALUES ("1", "27122", "80592", "1/14/1984", "CTS", "3341", "ROUTINE", "TUCK, YOURPANTSIN", "PICK, YASELFUP", "YES", "06/26/2013 10:20", "06/26/2013 10:20", "TEXT", "Results of Nodules!","Impressions of Nodules","2.5", "left upper lobe","None Found")
INSERT INTO Stack_Example
VALUES ("1", "27248", "80592", "1/14/1984", "CTS", "3341", "ROUTINE", "TUCK, YOURPANTSIN", "PICK, YASELFUP", "YES", "08/01/2013 06:23", "08/01/2013 06:23", "TEXT", "Results of Nodules!","Impressions of Nodules","4.0", "left lower lobe","None Found")
INSERT INTO Stack_Example
VALUES ("1", "28153", "35681", "03/01/1990", "CTS", "3341", "ROUTINE", "TUCK, YOURPANTSIN", "PICK, YASELFUP", "YES", "09/14/2012 05:00", "09/14/2012 05:00", "TEXT", "Results of Nodules!","Impressions of Nodules","4.0", "left lower lobe","None Found")
INSERT INTO Stack_Example
VALUES ("1", "29007", "35681", "03/01/1990", "CTS", "3341", "ROUTINE", "TUCK, YOURPANTSIN", "PICK, YASELFUP", "YES", "11/16/2012 08:23", "11/16/2012 08:23", "TEXT", "Results of Nodules!","Impressions of Nodules","3.5", "right lower lobe","None Found")
顯然這是假數據。我一直在試圖做的是用相關的子查詢自己加入表格。像這樣:
SELECT DISTINCT a.Accession1, a.MRN1, a.ReadDate, p.Accession1, p.ReadDate
FROM Stack_Example as a
INNER JOIN Stack_Example as p on a.MRN1 = p.MRN1
WHERE a.Accession1 =
(SELECT max(Accession1)
FROM Stack_Example as b
WHERE a.MRN1 = b.MRN1 AND
a.Accession1 != p. Accession1)
ORDER BY a.MRN1
理想是什麼,我想是一個MRN對行和加入每位患者每個MRN爲列(日期爲種質等一起)主表。這樣的事情:
| MRN | Accession (First Follow-up) | Date First Followup |Accession (Second Follow-up)..| Date Second Follow up | etc.
|:-----------|----------------------------:|:-------------------:|
| 001734 | 33374 | ......
| 80592 | 27248 | ......
我相信子查詢我需要一系列左連接;不過,有沒有更好的方法來做到這一點?有些患者隨訪7次以上。感謝任何幫助,對於長時間的解釋感到抱歉。希望格式可以。
你也可以包括工作www.SqlFiddle.com,這樣纔有利於測試的答案。 –