J'ai une base de données de rapports de radiologie que j'ai extraits pour des incidents de nodules pulmonaires. Chaque patient a un numéro d'enregistrement médical et chaque procédure a un numéro d'accès unique. Par conséquent, un MRN peut avoir plusieurs numéros d'accès pour les procédures de différence. Les numéros d'accès sont ascendants, donc si un patient a plusieurs numéros d'accession, le plus grand numéro d'accession est la dernière procédure. Je dois:Sous-requête corrélée dans SQL
- Identifier la plus ancienne (initiale) Etude
- Trouvez la prochaine étude qui vient plus tôt après la inital
- Calculer la différence de temps entre chaque intervalle
Je crois que ce problème peut être résolu en utilisant une sous-requête corrélée. Cependant, je ne suis pas encore assez expert en SQL pour résoudre ce problème. J'ai essayé de me joindre à la table et de trouver l'adhésion maximale pour chaque sous-requête. Voici un exemple de code pour créer un jeu de données:
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")
Il s'agit évidemment de fausses données. Ce que j'ai essayé de faire est de rejoindre la table sur elle-même avec une sous-requête corrélée. Comme si:
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
Idéalement ce que je voudrais une table principale avec un NRM pour chaque patient sur des lignes et des adhésions pour chaque NRM sous forme de colonnes (à côté des dates pour les adhésions, etc.). Quelque chose comme ceci:
| MRN | Accession (First Follow-up) | Date First Followup |Accession (Second Follow-up)..| Date Second Follow up | etc.
|:-----------|----------------------------:|:-------------------:|
| 001734 | 33374 | ......
| 80592 | 27248 | ......
Je crois que la sous-requête j'ai besoin d'une série de jointures de gauche; Cependant, y a-t-il une meilleure façon de le faire? Certains patients ont plus de 7 suivis. Appréciez toute aide et désolé pour la longue explication. J'espère que le formatage est correct.
Vous pouvez également inclure un travail www.SqlFiddle.com, qui aident à tester les réponses. –