Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按SQL语句分组_Sql_Sql Server_Tsql_Group By - Fatal编程技术网

按SQL语句分组

按SQL语句分组,sql,sql-server,tsql,group-by,Sql,Sql Server,Tsql,Group By,所以我得到了一个很好的声明: SELECT MAX(patient_history_date_bio) AS med_date, medication_name FROM biological WHERE patient_id = 12) GROUP BY medication_name 但是,我也希望有相应的药物剂量。所以我把这个打出来 SELECT MAX(patient_history_date_bio) AS med_date, medication_name,

所以我得到了一个很好的声明:

SELECT   MAX(patient_history_date_bio) AS med_date, medication_name
FROM     biological
WHERE    patient_id = 12)
GROUP BY medication_name
但是,我也希望有相应的药物剂量。所以我把这个打出来

SELECT   MAX(patient_history_date_bio) AS med_date, medication_name, medication_dose
FROM     biological
WHERE    (patient_id = 12)
GROUP BY medication_name
但是,它给了我一个错误的说法:

“列'biological.medicing_dose'在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中。”

所以我试着在GROUPBY子句中添加药物剂量,但它会给我额外的行,我不想要。 我想得到我桌子上每种药物的最新一行。(最新的行由max函数确定,获取最新的日期)

如何解决此问题?

您需要将
最大(药物剂量)
放入您的选择中
Group by
返回一个结果集,该结果集包含Group by子句中字段的不同值,因此显然您有多个记录具有相同的
名称,但剂量不同,因此您得到两个结果


通过输入
max(药物剂量)
它将返回每个
药物名称的最大剂量值。您可以对剂量使用任何聚合函数(最大、最小、平均、总和等)

如果您确实需要,作为一种快速解决方法,您可以对您的
药物剂量应用聚合函数,例如
最大(药物剂量)

但是请注意,这通常表示您没有正确地构建查询,或者需要重构/规范化数据库模式。在您的情况下,看起来您处理查询的方式不正确。正确的方法应该是建议的方法

您可能有兴趣查看以下有趣的文章,其中描述了此错误背后的原因:

使用:

SELECT b.medication_name,
       b.patient_history_date_bio AS med_date,
       b.medication_dose
  FROM BIOLOGICAL b
  JOIN (SELECT y.medication_name,
               MAX(y.patient_history_date_bio) AS max_date
          FROM BIOLOGICAL y
      GROUP BY y.medication_name) x ON x.medication_name = b.medication_name
                                   AND x.max_date = b.patient_history_date_bio
 WHERE b.patient_id = ?

看起来OP使用的是SQL Server。visual studio 2008用c#编写代码时使用的SQL Server。我认为这是sql server,对吗?请参见:,,以及其他许多内容。+1-刚刚把我推到了这篇文章。这是正确的(而且在医学上是安全的!)答案,因为它将给出最新剂量,而不是MAX()给出的最高剂量(不一定是最新剂量)。我唯一的补充是,如果有多个记录的日期相同,那么你需要使用另一个字段来确定最新的日期(例如,一个身份字段)。thx很多人(即使我在理解你的声明时有点困难…不用担心,我会弄明白的)。很抱歉回复太晚了嗯,这似乎不起作用。。。。它只给我2行,而应该给3行…@jello:数据是什么样子的?@OMG Ponies:你到底是什么意思?