2

私はSQLサーバーにかなり慣れていません...しかし、問題があります。以下のクエリを作成しました。これは、2012 年の患者のすべての訪問 (受診) と検査結果を表示するのに問題なく機能します。

SELECT pat.patient_id, pat.last_name, Pat.first_name, pat.ethnic_group,
pat.race, pl.icdcode, enc.encounter_date, lab.test_performed, lab.result_value,
lab.result_units
FROM dbo.dem_patient pat
RIGHT JOIN dbo.med_problemlist as pl
ON pat.patient_id = pl.patient_id
JOIN dbo.enc_encounter as enc
ON pat.patient_id = enc.patient_id
JOIN dbo.med_labresult as lab
ON pat.patient_id = lab.patient_id
WHERE pl.icdcode like '401.9%' AND
enc.encounter_date >= '01/01/2012' AND enc.encounter_date <= '12/31/2012' AND
pat.last_name != 'test' AND (lab.test_performed = 'HgbA1c' OR 
lab.test_performed = 'Hemoglobin A1c')
GROUP BY pat.patient_id, pat.last_name, Pat.first_name, pat.ethnic_group,
pat.race, pl.icdcode, enc.encounter_date, lab.test_performed, lab.result_value,
lab.result_units
ORDER BY race, ethnic_group

上記のクエリの結果は次のようになります。

patient_id  last_name  first_name  ethnic_group  race  icdcode  encounter_date lab_result
0           smith      john        HIS           WHI   401.90   01/01/2012     9.1
0           smith      john        HIS           WHI   401.90   10/12/2012     9.2
0           smith      john        HIS           WHI   401.90   11/15/2012     9.7
5           doe        jane        NSP           BLK   401.90   01/20/2012     11
6           davids     david       NSP           BLK   401.90   04/25/2012     5.9
6           davids     david       NSP           BLK   401.90   05/04/2012     6.4

ただし、ここで返す必要があるのは、2012 年 1 月 1 日から 2012 年 12 月 31 日までの間に複数回の来院 (受診) を行った患者のみです。このようになります(上記の結果から)

patient_id  last_name  first_name  ethnic_group  race  icdcode  encounter_date lab_result
0           smith      john        HIS           WHI   401.90   01/01/2012     9.1
6           davids     david       NSP           BLK   401.90   04/25/2012     5.9

誰でもこれで私を助けることができますか?

更新: したがって、以下の提案を使用して、クエリに HAVING COUNT(*) > 1 を追加しました。しかし、それは私がよく理解していない結果をもたらします。

HAVING COUNT(*) > 1 ステートメントを使用しないクエリの結果:

1001131     BLA 401.9   48:48.3 Hemoglobin A1c  9.9
1001131     BLA 401.9   00:00.0 Hemoglobin A1c  9.9
1001131     BLA 401.9   44:44.3 Hemoglobin A1c  9.9
1001648     BLA 401.9   50:15.6 Hemoglobin A1c  6.5
1001648     BLA 401.9   16:15.1 Hemoglobin A1c  6.5
1001648     BLA 401.9   28:04.5 Hemoglobin A1c  6.5
1001648     BLA 401.9   17:00.2 Hemoglobin A1c  6.5
1002648     BLA 401.9   17:47.8 Hemoglobin A1c  6.1
1002648     BLA 401.9   52:38.0 Hemoglobin A1c  6.1
1002648     BLA 401.9   43:47.3 Hemoglobin A1c  6.1
1002648     BLA 401.9   02:55.9 Hemoglobin A1c  6.1
1002715     BLA 401.9   37:52.4 Hemoglobin A1c  13.1
1002715     BLA 401.9   44:41.0 Hemoglobin A1c  12.6
1002715     BLA 401.9   44:41.0 Hemoglobin A1c  13.1
1002715     BLA 401.9   37:52.4 Hemoglobin A1c  10.7
1002715     BLA 401.9   37:52.4 Hemoglobin A1c  12.6
1002715     BLA 401.9   00:57.9 Hemoglobin A1c  10.7
1002715     BLA 401.9   00:57.9 Hemoglobin A1c  12.6
1002715     BLA 401.9   00:57.9 Hemoglobin A1c  13.1
1002715     BLA 401.9   38:17.6 Hemoglobin A1c  10.7
1002715     BLA 401.9   38:17.6 Hemoglobin A1c  12.6
1002715     BLA 401.9   38:17.6 Hemoglobin A1c  13.1
1002715     BLA 401.9   44:41.0 Hemoglobin A1c  10.7
1002893     BLA 401.9   33:45.4 Hemoglobin A1c  5.9
1002893     BLA 401.9   22:58.5 Hemoglobin A1c  5.9
1002893     BLA 401.9   00:00.0 Hemoglobin A1c  5.9
1002893     BLA 401.9   55:11.3 Hemoglobin A1c  5.9
1003195     BLA 401.9   34:08.7 Hemoglobin A1c  6.4
1003195     BLA 401.9   50:03.6 Hemoglobin A1c  6.4
1003195     BLA 401.9   08:36.8 Hemoglobin A1c  6.4
1003195     BLA 401.9   33:56.6 Hemoglobin A1c  6.4
1003195     BLA 401.9   34:04.3 Hemoglobin A1c  6.4

HAVING ステートメントを使用したクエリの結果:

1001937     BLA 401.9   11/14/12Hemoglobin A1c  6.3
1001937     BLA 401.9   8/14/12 Hemoglobin A1c  6.3
1001937     BLA 401.9   5/14/12 Hemoglobin A1c  6.3
1001937     BLA 401.9   2/14/12 Hemoglobin A1c  6.3
1001937     BLA 401.9   11/14/12Hemoglobin A1c  6.3
1002034     BLA 401.9   1/10/12 HEMOGLOBIN A1c  7.7
1002034     BLA 401.9   6/8/12  HEMOGLOBIN A1c  7.7
1002034     BLA 401.9   9/7/12  HEMOGLOBIN A1c  7.7
1002034     BLA 401.9   10/15/12HEMOGLOBIN A1c  7.7
1002648     BLA 401.9   2/22/12 Hemoglobin A1c  6.1
1002648     BLA 401.9   7/2/12  Hemoglobin A1c  6.1
1002648     BLA 401.9   10/2/12 Hemoglobin A1c  6.1
1002648     BLA 401.9   2/22/12 Hemoglobin A1c  6.1
1020923     BLA 401.9   1/30/12 HEMOGLOBIN A1c  10
1020923     BLA 401.9   1/30/12 Hemoglobin A1c  11.8
1020923     BLA 401.9   4/17/12 Hemoglobin A1c  11.8
1020923     BLA 401.9   5/16/12 HEMOGLOBIN A1c  10
1020923     BLA 401.9   5/16/12 Hemoglobin A1c  11.8
1020923     BLA 401.9   9/13/12 HEMOGLOBIN A1c  10
1020923     BLA 401.9   9/13/12 Hemoglobin A1c  9.3
1020923     BLA 401.9   10/1/12 HEMOGLOBIN A1c  10
1020923     BLA 401.9   10/1/12 Hemoglobin A1c  11.8
4

5 に答える 5

1

選択フィールドから日付を削除してから、

Select FIELDS where condition group by FIELDS  having count(*) > 1
于 2013-02-05T17:21:09.830 に答える
0

クエリは次のようになります。

SELECT pat.patient_id, pat.last_name, Pat.first_name, pat.ethnic_group,
       pat.race, pl.icdcode, enc.encounter_date, lab.test_performed, lab.result_value,
       lab.result_units
FROM dbo.dem_patient pat
     RIGHT JOIN dbo.med_problemlist as pl
      ON pat.patient_id = pl.patient_id
     JOIN dbo.enc_encounter as enc
      ON pat.patient_id = enc.patient_id
     JOIN dbo.med_labresult as lab
      ON pat.patient_id = lab.patient_id
WHERE pl.icdcode like '401.9%' AND
       enc.encounter_date >= '01/01/2012' AND enc.encounter_date <= '12/31/2012' AND
       pat.last_name != 'test' AND (lab.test_performed = 'HgbA1c' OR 
       lab.test_performed = 'Hemoglobin A1c')
GROUP BY pat.patient_id, pat.last_name, Pat.first_name, pat.ethnic_group,
         pat.race, pl.icdcode, enc.encounter_date, lab.test_performed,lab.result_value,
          lab.result_units
HAVING COUNT(*)>1
于 2013-02-05T17:25:45.283 に答える
0
;WITH PatientData (patient_id,last_name, first_name, ethnic_group,
race, icdcode, encounter_date, test_performed, result_value,
result_units )
AS
(
SELECT pat.patient_id, pat.last_name, Pat.first_name, pat.ethnic_group,
pat.race, pl.icdcode, enc.encounter_date, lab.test_performed, lab.result_value,
lab.result_units
FROM dbo.dem_patient pat
RIGHT JOIN dbo.med_problemlist as pl
ON pat.patient_id = pl.patient_id
JOIN dbo.enc_encounter as enc
ON pat.patient_id = enc.patient_id
JOIN dbo.med_labresult as lab
ON pat.patient_id = lab.patient_id
WHERE pl.icdcode like '401.9%' AND
enc.encounter_date >= '01/01/2012' AND enc.encounter_date <= '12/31/2012' AND
pat.last_name != 'test' AND (lab.test_performed = 'HgbA1c' OR 
lab.test_performed = 'Hemoglobin A1c')
GROUP BY pat.patient_id, pat.last_name, Pat.first_name, pat.ethnic_group,
pat.race, pl.icdcode, enc.encounter_date, lab.test_performed, lab.result_value,
lab.result_units
)

SELECT patient_id,last_name, first_name, ethnic_group,
race, icdcode, encounter_date, test_performed, result_value,
result_units
FROM PatientData pd1 
WHERE EXISTS (SELECT patient_id 
                FROM PatientData pd2 
                WHERE p2.patient_id  = pd1.patient_id  
                GROUP BY patient_id 
                HAVING COUNT(*)>1 )
ORDER BY pd1.race, pd1.ethnic_group

これが行うことは、共通テーブル式 (CTE) と呼ばれる一時的な名前付き結果セットを作成することです。これにはすべてのデータが含まれています。次に、select は、患者 ID が複数回存在する CTE 内のレコードのみを選択します。

于 2013-02-05T21:47:16.670 に答える
0

頭のてっぺんから、別の結合条件をインライン ビューに追加します。そこでは、遭遇数が > 1 であるセットから最小遭遇日を取得します。結合条件は、enc.encounterdate = inlineview.encounterdate になります。

投稿した結果の例は、最初の出会いを探しているように見えるので、最後の出会いが必要な場合は min を使用し、次に max を使用します。

于 2013-02-05T17:27:31.877 に答える
0

あなたの結果では、lab_resultとencounter_dateの値が異なります。リクエストは、データをグループ化するための最小値を返します

SELECT pat.patient_id, pat.last_name, Pat.first_name, pat.ethnic_group,
       pat.race, pl.icdcode, MIN(enc.encounter_date), MIN(lab.result_value)
FROM dbo.dem_patient pat RIGHT JOIN dbo.med_problemlist as pl ON pat.patient_id = pl.patient_id
                               JOIN dbo.enc_encounter as enc ON pat.patient_id = enc.patient_id
                               JOIN dbo.med_labresult as lab ON pat.patient_id = lab.patient_id
WHERE pl.icdcode like '401.9%' AND enc.encounter_date >= '01/01/2012' AND enc.encounter_date <= '12/31/2012' AND
      pat.last_name != 'test' AND (lab.test_performed = 'HgbA1c' OR lab.test_performed = 'Hemoglobin A1c')
GROUP BY pat.patient_id, pat.last_name, Pat.first_name, pat.ethnic_group,
         pat.race, pl.icdcode
HAVING COUNT(*) > 1
ORDER BY race, ethnic_group
于 2013-02-05T21:45:37.057 に答える