Код ошибки SQL 1055. Минимальная дата по флагу по группе - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь найти минимальную дату, когда пациент принимал лекарство с определенным флагом. Вот код, который я использую:

create table Schema.Want as select 
*, min(case when Flag="True" then Date end) as First_Date 
from Schema.Have group by Patient_ID; 

Я также попытался перечислить все переменные, но это тоже не помогло. Когда я запускаю этот код, я получаю код ошибки 1055, связанный с «only_full_group». Я видел, как другие предлагали мне отключить это (что я еще не пробовал), но меня беспокоит, почему эта ошибка возникает в первую очередь. Когда я получаю этот код ошибки, означает ли это, что в моей таблице есть повторяющиеся строки?

У меня есть Patient_ID (NUM), Drug_ID (NUM), количество (NUM), Fill_Date (дата / символ), флаг (CHAR), Comp_Set (CHAR) и Drug_strength (CHAR). Таким образом, если один пациент выписал два рецепта с одинаковой силой и количеством одного и того же точного препарата в один и тот же день, то два их ряда были бы идентичны. Хотя мне это не кажется вероятным.

Все, что мне нужно сделать, - это создать отдельный столбец с самой ранней датой, когда пациенту было назначено определенное лекарство. Мой код работал с использованием proc sql в SAS, но не тогда, когда я использую MySQL. Заранее спасибо за помощь !!

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Все значения, которые есть в Select, кроме min, также должны быть в предложении group by.

create table Schema.Want as select 
Patient_ID, min(case when Flag="True" then Date end) as First_Date 
from Schema.Have group by Patient_ID;

Примечание: если у вас есть другие числовые переменные в select; вам нужно будет дать им статистическую функцию (min, max, avg ..) и не включать их в group by.

Я рекомендую сделать выбор только в SQL, прежде чем принять решение о создании таблицы:

select Patient_ID, min(case when Flag="True" then Date end) as First_Date 
from Schema.Have group by Patient_ID;
0 голосов
/ 09 мая 2018

Вам необходимо снова ввести значение MIN () в подробные записи. Если вы проверите журнал в SAS, то увидите, что в нем говорится, что он выполняет для вас повторную проверку.

create table Schema.Want as 
select a.*,b.First_Date
from Schema.Have a 
inner join 
(select Patient_ID, min(case when Flag="True" then Date end) as First_Date 
from Schema.Have group by Patient_ID) b
on a.Patient_ID=b.Patient_ID
;
0 голосов
/ 09 мая 2018

Используйте выбор в:

select 
*, min(case when Flag="True" then Date end) as First_Date  into Schema.Want
from Schema.Have group by Patient_ID

Также замените * именами столбцов и группы по всем именам

...