我有一个放射性肺结节事件的放射学报告数据库。每名患者都有一个医疗记录号,每个程序都有一个唯一的登录号。因此,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,这样才有利于测试的答案。 –