Я столкнулся с ударом при попытке выполнить следующее
У меня есть таблица с записями о входе и выходе пациентов
My_table
ID NAME DATE TYPE PERFORMANCE_SCORE
103 John 08/12/18 EX 8
103 John 08/04/18 EN 5
105 Dave 06/22/18 EX 12
105 Dave 06/14/18 EN 16
108 Ben 02/07/19 EX 15
108 Ben 02/01/19 EN 19
Где EN =Входная запись, EX = выходная запись.Мне нужно получить записи входа и выхода, где разница в «Performance_Score» между «Выходная запись (EX)» и «Входная запись (EN)» отрицательна.Я ожидаю, что конечный результат будет похож на
Обязательный результат:
ID NAME DATE TYPE PERFORMANCE_SCORE
105 Dave 06/22/18 EX 12
105 Dave 06/14/18 EN 16
108 Ben 02/07/19 EX 15
108 Ben 02/01/19 EN 19
Я пытался сделать это с помощью Union, как показано ниже
select * from
(
SELECT
a.ID,
a.NAME,
a.DATE,
a.TYPE,
a.PERFORMANCE_SCORE
FROM My_table a
WHERE
a.TYPE = 'EX'
UNION ALL
SELECT
b.ID,
b.NAME,
b.DATE,
b.TYPE,
b.PERFORMANCE_SCORE
FROM My_table b
WHERE
b.TYPE = 'EN'
)
where a.ID = b.ID and a.NAME = b.NAME and b.PERFORMANCE_SCORE - a.PERFORMANCE_SCORE < 0 --> I know this condition can't be used outside the UNION block, but how can I implement this condition to get the result I need?
Когда я пытаюсь использоватьINNER JOIN вот так
SELECT * FROM
(
SELECT
ID,
NAME,
DATE,
TYPE,
PERFORMANCE_SCORE
FROM My_table
WHERE
TYPE = 'EX'
)
a
INNER JOIN
(
SELECT
ID,
NAME,
DATE,
TYPE,
PERFORMANCE_SCORE
FROM My_table
WHERE
TYPE = 'EN'
)
b
ON
a.ID = b.ID AND a.NAME = b.NAME and b.PERFORMANCE_SCORE - a.PERFORMANCE_SCORE < 0
Я получаю нужные записи, но они все в одном ряду, как показано ниже
ID NAME DATE TYPE PERFORMANCE_SCORE ID NAME DATE TYPE PERFORMANCE_SCORE
105 Dave 06/22/18 EX 12 105 Dave 06/14/18 EN 16
108 Ben 02/07/19 EX 15 108 Ben 02/01/19 EN 19
Чего мне не хватает?