sql错误代码1055按组按标志列出的最短日期

km0tfn4u  于 2021-06-25  发布在  Mysql
关注(0)|答案(3)|浏览(329)

我想找出病人服用带有特定标志药物的最短日期。下面是我使用的代码:

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。我看到其他人建议我关闭这个功能(我还没有尝试过),但是我很担心为什么会首先抛出这个错误。当我得到这个错误代码时,这是否意味着我的表中有重复的行?
我有病人id(num)、药物id(num)、数量(num)、填充日期(date/char)、标志(char)、成分集(char)和药物强度(char)。因此,如果一个病人在同一天开了两张处方,剂量和剂量都相同,那么他们的两排就完全一样了。但我觉得不太可能。
我所要做的就是创建一个单独的列,列上患者开某种药物的最早日期。我的代码在sas中使用procsql工作,但在我使用mysql时就不行了。提前谢谢你的帮助!!

7rfyedvj

7rfyedvj1#

您需要将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
;
b91juud3

b91juud32#

您在 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 ; 你必须给他们一个聚合函数(最小值,最大值,平均值…),而不是把他们包含在 group by .
我建议在决定创建表之前在sql中执行select only:

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

sg3maiej3#

使用选择进入:

select 

* , min(case when Flag="True" then Date end) as First_Date  into Schema.Want

from Schema.Have group by Patient_ID

同时将*替换为列名并按所有名称分组

相关问题