MySQL ВЫБИРАЕТ строку, если значение между двумя таблицами увеличилось

#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