一旦你有你的string_to_array
你需要unnest
它。然後,您需要加入ICD10
,並對每位患者採取first
診斷。
假設我們有以下數據:
CREATE TABLE patients
(
patient_id integer PRIMARY KEY,
diag_list text NOT NULL
) ;
INSERT INTO patients
VALUES
(1, 'A10.3,B55.2, A10.1') ,
(2, 'A10.3, A10.1, C20.2') ;
CREATE TABLE ICD10
(
primary_diag text PRIMARY KEY,
diagnose text
) ;
INSERT INTO ICD10
VALUES
('B55.2', 'Something Bad'),
('A10.1', 'Somehitng Worse');
有了這些數據,我們就可以開始unnest with ordinality
數據:
SELECT
patient_id, trim(diag) AS diag, nr
FROM
patients
JOIN LATERAL unnest(string_to_array(diag_list, ','))
WITH ORDINALITY AS a(diag, nr) ON true ;
,並得到
+------------+-------+----+
| patient_id | diag | nr |
+------------+-------+----+
| 1 | A10.3 | 1 |
| 1 | B55.2 | 2 |
| 1 | A10.1 | 3 |
| 2 | A10.3 | 1 |
| 2 | A10.1 | 2 |
| 2 | C20.2 | 3 |
+------------+-------+----+
下一步:加入這個數據與ICD10
WITH patients_and_diags AS
(
SELECT
patient_id, trim(diag) AS diag, nr
FROM
patients
JOIN LATERAL unnest(string_to_array(diag_list, ','))
WITH ORDINALITY AS a(diag, nr) ON true
)
SELECT
patient_id, diag, nr, diagnose
FROM
patients_and_diags
JOIN ICD10 ON ICD10.primary_diag = patients_and_diags.diag ;
...並獲得:
+------------+-------+----+-----------------+
| patient_id | diag | nr | diagnose |
+------------+-------+----+-----------------+
| 1 | B55.2 | 2 | Something Bad |
| 1 | A10.1 | 3 | Somehitng Worse |
| 2 | A10.1 | 2 | Somehitng Worse |
+------------+-------+----+-----------------+
現在,我們需要採取只有最小的 'NR' 每個patient_id
下面的查詢,盡一切一步
WITH patients_and_diags AS
(
SELECT
patient_id, trim(diag) AS diag, nr
FROM
patients
JOIN LATERAL unnest(string_to_array(diag_list, ','))
WITH ORDINALITY AS a(diag, nr) ON true
)
, patients_and_ICD10 AS
(
SELECT
patient_id, diag, nr, diagnose
FROM
patients_and_diags
JOIN ICD10 ON ICD10.primary_diag = patients_and_diags.diag
)
, first_ICD10 AS
(
SELECT
patient_id, min(nr) AS nr
FROM
patients_and_ICD10
GROUP BY
patient_id
)
SELECT
patient_id, diag, diagnose
FROM
first_ICD10
JOIN patients_and_ICD10 USING(patient_id, nr) ;
...給你拿:
+------------+-------+-----------------+
| patient_id | diag | diagnose |
+------------+-------+-----------------+
| 1 | B55.2 | Something Bad |
| 2 | A10.1 | Somehitng Worse |
+------------+-------+-----------------+
您可以在http://rextester.com/RDYPD23700
檢查所有的查詢可以由通過使用一些WINDOW
功能短;但我認爲這種循序漸進的方法更爲明確。
請添加一些數據樣本,包括請求的結果 –