Отдельные записи в моей базе данных MySQL 5.7 позволяют пересматривать их через PHP: таким образом, уже сохраненные наборы записей данных могут быть актуализированы.Для каждой отдельной актуализации, которая представляет собой не что иное, как сохранение одной и той же записи данных, установленной n раз, автоматически устанавливается номер редакции (он начинается с 0):
+----+-----------+-----------+-------------------+----------+
| ID | PatientID | SurgeryID | blahblahblah | revision |
+----+-----------+-----------+-------------------+----------+
| 1 | 8883 | 7493 | Appendectomy | 0 |
| 2 | 8883 | 7493 | Appendectomy | 1 |
| 3 | 8883 | 7493 | Lap. Appendectomy | 2 |
+----+-----------+-----------+-------------------+----------+
Набор записей данных, который меня интересуетКонечно, это тот, у которого наибольшее число, так как это последняя редакция:
+----+-----------+-----------+-------------------+----------+
| ID | PatientID | SurgeryID | blahblahblah | revision |
+----+-----------+-----------+-------------------+----------+
| 3 | 8883 | 7493 | Lap. Appendectomy | 2 |
+----+-----------+-----------+-------------------+----------+
(Пожалуйста, обратите внимание, что термины бла-бла заменены числами (см. ниже), я только что назвал их здесь длячтобы лучше увидеть проблему.)
Как я могу СЧИТАТЬ эти отфильтрованные наборы записей данных?
Выполнено до сих пор:
Код запроса SQL для фильтрации данных с наибольшей ревизиейнабор записей выглядит следующим образом:
SELECT DISTINCT p.ID, p.PatientID, op.PatID, op.SurgeryID, op.blahblahblah, op.revision
FROM patient_table p
LEFT OUTER JOIN surgery_table op ON op.PatID = p.PatientID
WHERE some restrictions
AND p.PatientID = op.PatID -- possibly redundant
AND NOT EXISTS (SELECT 1
FROM surgery_table op2
WHERE op2.PatID = p.PatientID AND op2.revision > op.revision
);
Этот код запроса SQL работает нормально и дает правильные результаты.
Теперь я хочу СЧИТАТЬ только различные выполненные формы операций.Мой код SQL-запроса до сих пор выглядит следующим образом:
SELECT COUNT(IF(op.blahblahblah = '0',1,NULL)) 'No Nurgery',
COUNT(IF(op.blahblahblah = '1',1,NULL)) 'Appendectomy',
COUNT(IF(op.blahblahblah = '2',1,NULL)) 'Lap. Appendectomy',
[... lots of surgical procedures listed here ...],
COUNT(IF(op.blahblahblah = '50',1,NULL)) 'Colostomy',
COUNT(IF(op.blahblahblah = '99',1,NULL)) 'Different Surgery'
FROM surgery_table op
WHERE op.SurgeryDate BETWEEN "2000-01-01" AND "2020-12-31"
Это, конечно, обеспечивает ВСЕ наборы записей данных независимо от их номеров редакций:
+-------------------+-----------------------------------------------------+
| blahblahblah | COUNTs of blahblahblah / no latest revision numbers |
+-------------------+-----------------------------------------------------+
| Appendectomy | 34579 |
| Lap Appendectomy | 23475 |
| ... | ... |
| Colostomy | 3547 |
| Different Surgery | 49558 |
+-------------------+-----------------------------------------------------+
Как объединить или объединитьили какой-то первый и второй SQL-запрос к COUNT просто записи данных с наибольшим номером ревизии?
В результате я хочу получить таблицу, подобную этой:
+-------------------+-----------------------------------------------------+
| blahblahblah | COUNTs of blahblahblah / latest revision numbers |
+-------------------+-----------------------------------------------------+
| Appendectomy | 3854 |
| Lap Appendectomy | 1473 |
| ... | ... |
| Colostomy | 563 |
| Different Surgery | 2534 |
+-------------------+-----------------------------------------------------+