string_to_array
を取得したら、unnest
にする必要があります。その後、ICD10
に参加する必要があり、患者ごとにfirst
という診断を受けます。
は、我々は次のようなデータがあるとします。
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 |
+------------+-------+----+
次のステップを取得:このデータでは
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
あなたのデータに開始することができます参加しますこのデータは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 ;
...とget:
+------------+-------+----+-----------------+
| patient_id | diag | nr | diagnose |
+------------+-------+----+-----------------+
| 1 | B55.2 | 2 | Something Bad |
| 1 | A10.1 | 3 | Somehitng Worse |
| 2 | A10.1 | 2 | Somehitng Worse |
+------------+-------+----+-----------------+
は、今、私たちは、それぞれが
次のクエリをpatient_idのみ最小NR '' を取る必要はワンステップですべてを行い
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 |
+------------+-------+-----------------+
をクエリは、いくつかのWINDOW
の機能を使用することによって短くすることができhttp://rextester.com/RDYPD23700
にすべてをチェックすることができます。私はこの段階的なアプローチがより明確だと思います。
要求された結果を含むいくつかのデータサンプルを追加してください。 –