Следующий запрос SQL обозначает ситуацию в системе документирования пациента:
mysql> SELECT op.ID, op.patID, op.OP1OPVerfahren, op.revision
-> FROM dat_optherapie op
-> WHERE 1 = 1
-> AND op.OP1OPVerfahren > 0
-> LIMIT 25;
+----+-------+----------------+----------+
| ID | patID | OP1OPVerfahren | revision |
+----+-------+----------------+----------+
| 59 | 649 | 1 | 33 |
| 60 | 649 | 1 | 34 |
| 61 | 649 | 1 | 35 |
| 62 | 649 | 1 | 36 |
| 63 | 649 | 1 | 37 |
| 64 | 649 | 1 | 38 |
| 65 | 649 | 1 | 39 |
| 66 | 649 | 1 | 40 |
| 67 | 649 | 1 | 41 |
| 68 | 649 | 2 | 42 |
| 69 | 649 | 2 | 43 |
| 70 | 649 | 2 | 44 |
| 71 | 649 | 2 | 45 |
| 72 | 649 | 2 | 46 |
| 73 | 649 | 2 | 47 |
| 74 | 649 | 2 | 48 |
| 75 | 649 | 2 | 49 |
| 76 | 649 | 2 | 50 |
| 77 | 649 | 2 | 51 |
| 78 | 649 | 2 | 52 |
| 79 | 649 | 2 | 53 |
| 80 | 649 | 2 | 54 |
| 81 | 649 | 2 | 55 |
| 82 | 649 | 2 | 56 |
| 83 | 649 | 2 | 57 |
+----+-------+----------------+----------+
Интерпретация: одному и тому же patID были даны две разные числовые хирургические процедуры (OP1OPVerfahren) - каждое изменение данных получалоправильный номер ревизии (ревизия).Это означает, что человек, документирующий данные пациента, допустил ошибку и изменил неправильный номер хирургической процедуры «1» на «2» в ходе пересмотра набора данных пациента.
Я могу отфильтровать эти данные с помощьюпроверка максимальной ревизии в запросе SQL, которая приводит к
+----+-------+----------------+----------+
| ID | patID | OP1OPVerfahren | revision |
+----+-------+----------------+----------+
| 83 | 649 | 2 | 57 |
+----+-------+----------------+----------+
Здесь нет проблем.Однако я хочу иметь подсчитанный список всех максимальных ревизий OP1OPVerfahren, существующих в моей базе данных.До сих пор фрагмент кода выглядит следующим образом:
SELECT COUNT(IF(op.OP1OPVerfahren = '0',1,NULL)) 'Keine Operation durchgeführt',
COUNT(IF(op.OP1OPVerfahren = '1',1,NULL)) 'Bioenterics Intragastric Ballon (BIB)',
COUNT(IF(op.OP1OPVerfahren = '2',1,NULL)) 'Gastric Banding',
COUNT(IF(op.OP1OPVerfahren = '3',1,NULL)) 'Roux-en-Y Gastric Bypass',
COUNT(IF(op.OP1OPVerfahren = '4',1,NULL)) 'Roux-en-Y Gastric Bypass banded',
COUNT(IF(op.OP1OPVerfahren = '5',1,NULL)) 'Scopinaro',
COUNT(IF(op.OP1OPVerfahren = '6',1,NULL)) 'Duodenal Switch (DS)',
COUNT(IF(op.OP1OPVerfahren = '7',1,NULL)) 'Sleeve Resection',
COUNT(IF(op.OP1OPVerfahren = '8',1,NULL)) 'Gastric Pacemaker',
COUNT(IF(op.OP1OPVerfahren = '9',1,NULL)) 'Billroth II',
COUNT(IF(op.OP1OPVerfahren = '10',1,NULL)) 'Gastroplasty',
COUNT(IF(op.OP1OPVerfahren = '11',1,NULL)) 'Fobi / Capella Bypass',
COUNT(IF(op.OP1OPVerfahren = '12',1,NULL)) 'Larrad',
COUNT(IF(op.OP1OPVerfahren = '13',1,NULL)) 'Santora',
COUNT(IF(op.OP1OPVerfahren = '14',1,NULL)) 'DJB',
COUNT(IF(op.OP1OPVerfahren = '15',1,NULL)) 'TOGA',
COUNT(IF(op.OP1OPVerfahren = '16',1,NULL)) 'Endobarrier',
COUNT(IF(op.OP1OPVerfahren = '17',1,NULL)) 'Gastric Plication',
COUNT(IF(op.OP1OPVerfahren = '18',1,NULL)) 'Stomaphyx',
COUNT(IF(op.OP1OPVerfahren = '19',1,NULL)) 'Omega Loop Bypass',
COUNT(IF(op.OP1OPVerfahren = '20',1,NULL)) 'Omega Loop Bypass banded',
COUNT(IF(op.OP1OPVerfahren = '21',1,NULL)) 'Long Limb Bypass',
COUNT(IF(op.OP1OPVerfahren = '22',1,NULL)) 'Distal Very Long Gastric Bypass (Thurnheer)',
COUNT(IF(op.OP1OPVerfahren = '23',1,NULL)) 'Endoscopic Sclerosation',
COUNT(IF(op.OP1OPVerfahren = '24',1,NULL)) 'Swedish Adjustable Gastric Bypass (SAGB)',
COUNT(IF(op.OP1OPVerfahren = '25',1,NULL)) 'Vertical Banded Gastroplasty (VBG)',
COUNT(IF(op.OP1OPVerfahren = '26',1,NULL)) 'Plastic Abdominal Wall Reconstruction (PAWR)',
COUNT(IF(op.OP1OPVerfahren = '27',1,NULL)) 'Inner Hernia Repair',
COUNT(IF(op.OP1OPVerfahren = '28',1,NULL)) 'Single Anastomosis Duodeno-Ileal Bypass with Sleeve Gastrectomy (SADI-S)',
COUNT(IF(op.OP1OPVerfahren = '99',1,NULL)) 'Anderes OP-Verfahren'
FROM dat_optherapie op
WHERE op.OP1Datum BETWEEN "1950-01-01" AND "2050-12-31"
AND op.OP1OPVerfahren > 0
-- AND NOT EXISTS (SELECT 1 FROM dat_optherapie op2 WHERE op2.revision > op.revision)
-- AND op.revision = (SELECT max(op2.revision) FROM dat_optherapie op2 WHERE op2.ID = op.ID AND op2.revision > op.revision)
-- GROUP BY op.OP1OPVerfahren;
-- GROUP BY 1;
"- ..." обозначают варианты, которые я опробовал до сих пор.
Оставляя в стороне два условия AND, касающиеся номеров редакцийЯ получаю подсчеты для ВСЕХ OP1OPVerfahren без учета наибольшего номера ревизии.
Как я могу интегрировать наивысший номер ревизии в этот SQL-запрос в качестве фильтра, чтобы считать только последний задокументированный OP1OPVerfahren?