#mysql #select
Вопрос:
У меня есть таблица в mysql с идентификаторами пациентов с остеоартрозом и их классом KL во время разных посещений. Я хотел бы знать запрос, чтобы выбрать и определить, кто является быстрым прогрессором (идентификаторы, класс kl которых увеличился с 0-1 до 3 при сравнении двух разных посещений (V00 против V06; V03 против V08; V06 против V10)) и не является быстрым прогрессором (идентификатор, класс kl которого увеличился с 0-1 до 2 при сравнении одних и тех же посещений). Сторона столбца особенно важна, если значения относятся к правому или левому колену.
Вот несколько строк в качестве примера моей таблицы (имя таблицы: KL_grade):
ID | сторона | V00XRKL | V03XRKL | V05XRKL | V06XRKL | V08XRKL | V10XRKL |
---|---|---|---|---|---|---|---|
1 | 1 | 0 | 0 | 0 | 3 | 3 | 4 |
1 | 2 | 0 | 0 | 0 | 2 | 3 | 4 |
2 | 1 | 1 | 1 | 2 | 2 | 3 | 4 |
2 | 2 | 1 | 1 | 2 | 2 | 3 | 4 |
3 | 1 | 1 | 1 | 2 | 2 | 2 | 2 |
3 | 2 | 0 | 0 | 2 | 2 | 3 | 4 |
Я попробовал эту инструкцию, чтобы выбрать быстрые прогрессоры, но она возвращает не все из них.
SELECT a.id, a.SIDE
from kl_grade a
left join (SELECT b.id, b.SIDE
from kl_grade b
where V03XRKL BETWEEN 0 and 1 and V08XRKL >= 3) b
on a.ID = b.id and a.SIDE = b.SIDE
left join (SELECT c.id, c.SIDE
from kl_grade c
where V06XRKL BETWEEN 0 and 1 and V10XRKL >= 3) c
on a.ID = c.id and a.SIDE = c.SIDE
where V00XRKL BETWEEN 0 and 1 and V06XRKL >= 3
UNION
SELECT a.id, a.SIDE
from kl_grade a
right join (SELECT b.id, b.SIDE
from kl_grade b
where V03XRKL BETWEEN 0 and 1 and V08XRKL >= 3) b
on a.ID = b.id and a.SIDE = b.SIDE
right join (SELECT c.id, c.SIDE
from kl_grade c
where V06XRKL BETWEEN 0 and 1 and V10XRKL >= 3) c
on a.ID = c.id and a.SIDE = c.SIDE
where V00XRKL BETWEEN 0 and 1 and V06XRKL >= 3;
Редактировать:
Чтобы найти быстрые прогрессоры между посещениями 0 и 6, я попытался:
select ID
CASE
when V00XRKL < 2 and V06XRKL > 2
then 'rapid progressor'
END
from kl_grade kg
но в ответ я получаю синтаксическую ошибку:
Ошибка SQL [1064] [42000]: У вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на наличие правильного синтаксиса для использования рядом с » когда V00XRKL < 2 и V06XRKL > 2, затем «быстрый прогрессор» из kl_grade kg» в строке 3
Я заглядываю в руководство по mysql, но синтаксис должен быть правильным… Я не могу понять, что я делаю не так.
Комментарии:
1. Подумайте о пересмотре своей схемы. Таблица базы данных-это не электронная таблица!
2. Я получаю синтаксическую ошибку , Запятая между выходными выражениями потеряна.
Ответ №1:
Нормализованная схема может выглядеть примерно следующим образом:
table_a
ID SIDE
1 1
1 2
2 1
2 2
3 1
3 2
table_b
id table_a_ID v_type value
1 2 V00XRKL 1
2 2 V00XRKL 1
3 3 V00XRKL 1
4 2 V03XRKL 1
5 2 V03XRKL 1
6 3 V03XRKL 1
7 2 V05XRKL 2
8 2 V05XRKL 2
9 3 V05XRKL 2
10 3 V05XRKL 2
11 1 V06XRKL 3
12 1 V06XRKL 2
13 2 V06XRKL 2
14 2 V06XRKL 2
15 3 V06XRKL 2
16 3 V06XRKL 2
17 1 V08XRKL 3
18 1 V08XRKL 3
19 2 V08XRKL 3
20 2 V08XRKL 3
21 3 V08XRKL 2
22 3 V08XRKL 3
23 1 V08XRKL 4
24 1 V08XRKL 4
25 2 V08XRKL 4
26 2 V08XRKL 4
27 3 V08XRKL 2
28 3 V08XRKL 4