我试图找到患者服用某种标志药物的最短日期。以下是我使用的代码:
create table Schema.Want as select
*, min(case when Flag="True" then Date end) as First_Date
from Schema.Have group by Patient_ID;
我也尝试列出所有变量,但这也没有帮助。当我运行该代码时,我得到与" only_full_group"相关联的错误代码1055。我已经看到其他人建议我关闭它(我还没试过),但是我担心为什么这个错误会被抛出。当我收到此错误代码时,这是否意味着我的表中有重复的行?
我有Patient_ID(NUM),Drug_ID(NUM),数量(NUM),Fill_Date(日期/字符),Flag(CHAR),Comp_Set(CHAR)和Drug_strength(CHAR)。因此,如果一名患者在同一天填写两份相同强度和数量的相同精确药物的处方,那么他们的两行将是相同的。但这对我来说似乎不太可能。
我需要做的就是创建一个单独的列,其中包含患者开出某种药物的最早日期。我的代码在SAS中使用proc sql,但在使用MySQL时却没有。感谢您的帮助!!
答案 0 :(得分:1)
您需要将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
;
答案 1 :(得分:0)
使用select into:
e
同样用列名替换*,用所有名称替换
答案 2 :(得分:0)
除了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:
select Patient_ID, min(case when Flag="True" then Date end) as First_Date
from Schema.Have group by Patient_ID;