GROUPBY子句中的TSQL错误
我对填充的表变量进行了以下查询,该变量应返回行或每个行的最新日期:GROUPBY子句中的TSQL错误,sql,sql-server,sql-server-2005,tsql,sql-server-2008,Sql,Sql Server,Sql Server 2005,Tsql,Sql Server 2008,我对填充的表变量进行了以下查询,该变量应返回行或每个行的最新日期: SELECT t.ID ,t.Column_2 ,t.MaxDate AS [End Date Time] ,t.Column_3 ,t.Column_4 ,t.Column_5 FROM ( SELECT ID ,Column_2 ,MAX(EndDateTime) AS MaxDate ,Column_3 ,Col
SELECT t.ID
,t.Column_2
,t.MaxDate AS [End Date Time]
,t.Column_3
,t.Column_4
,t.Column_5
FROM (
SELECT ID
,Column_2
,MAX(EndDateTime) AS MaxDate
,Column_3
,Column_4
,Column_5
FROM @MyTable
GROUP BY Column_2
) t
INNER JOIN @MyTable o ON t.ID = o.ID
AND t.MaxDate = o.EndDateTime
我不断收到错误:列'@MyTable.ID'在select列表中无效,因为它未包含在聚合函数或GROUP BY子句中。
不确定问题是什么,因为我在内部select语句中包含GROUP BY子句,是否还需要一个OUTER select查询?另外,如何在最终返回结果中将其修改为按EndDateTime DESC排序??先谢谢你
更新:
谢谢大家的反馈,我纠正了错误,学到了一些新东西。谢谢。您需要聚合select语句中的每个
字段的MAX()、MIN()、AVG()
或分组依据
您不必对导致问题的ID、第3列-第5列进行分组或聚合。您需要在select语句中的每个字段中聚合MAX()、MIN()、AVG()
或按分组
您不必对导致问题的ID、第3列-第5列进行分组或聚合。您需要包括所有未聚合的列。我认为你应该做以下几点:
SELECT o.ID
,o.Column_2
,t.MaxDate AS [End Date Time]
,o.Column_3
,o.Column_4
,o.Column_5
FROM (
SELECT ID
,MAX(EndDateTime) AS MaxDate
FROM @MyTable
GROUP BY ID
) t
INNER JOIN @MyTable o ON t.ID = o.ID
AND t.MaxDate = o.EndDateTime
您需要包含所有未聚合的列。我认为你应该做以下几点:
SELECT o.ID
,o.Column_2
,t.MaxDate AS [End Date Time]
,o.Column_3
,o.Column_4
,o.Column_5
FROM (
SELECT ID
,MAX(EndDateTime) AS MaxDate
FROM @MyTable
GROUP BY ID
) t
INNER JOIN @MyTable o ON t.ID = o.ID
AND t.MaxDate = o.EndDateTime
错误来自最内部的SELECT
查询。它告诉您不能在一列上应用聚合字段,按第二列分组,然后对其他4列不做任何操作。试试这个(结果可能会有所不同,这取决于您实际试图产生的结果):
错误来自最内部的SELECT
查询。它告诉您不能在一列上应用聚合字段,按第二列分组,然后对其他4列不做任何操作。试试这个(结果可能会有所不同,这取决于您实际试图产生的结果):
定义group by时,select中的所有项必须包含在group by子句中或包含在聚合中,以便服务器知道如何处理分组值。在内部选择中,您需要执行以下操作:
SELECT ID
,Column_2
,MAX(EndDateTime) AS MaxDate
,Column_3
,Column_4
,Column_5
FROM @MyTable
GROUP BY ID
,Column_2
,EndDateTime
,Column_3
,Column_4
,Column_5
或
如果不提供聚合或不按其行为包含组中的其他列,则将无法定义。当您按定义组时,select中的所有项必须包含在group by子句中或包含在聚合中,以便服务器知道如何处理分组值。在内部选择中,您需要执行以下操作:
SELECT ID
,Column_2
,MAX(EndDateTime) AS MaxDate
,Column_3
,Column_4
,Column_5
FROM @MyTable
GROUP BY ID
,Column_2
,EndDateTime
,Column_3
,Column_4
,Column_5
或
如果不提供聚合或不按其行为包含组中的其他列,则将无法定义。+1用于简化发布的查询。我认为这可能是他应该做的。如果ID
是一个关键字段,那么groupbyid
将始终选择每一行,使子句毫无意义。海报需要解释他试图实现的目标。@DourHighArch-你是对的,但是如果ID
是一个键,那么当op试图获得最长日期时,它不应该出现在SELECT
上。+1用于简化发布的查询。我认为这可能是他应该做的。如果ID
是一个关键字段,那么groupbyid
将始终选择每一行,使子句毫无意义。海报需要解释他试图实现的目标。@DourHighArch-你是对的,但是如果ID
是一个键,那么当op试图获得一个最大日期时,它不应该出现在SELECT
上。这不是我的反对票,但你将max(EndDateTime)作为组中的一个字段,谢谢,JML。我想知道他们是否反对这笔钱。分组聚合已删除。这不是我的否决票,但您将MAX(EndDateTime)作为组中的字段之一,ByThank,JML。我想知道他们是否反对这笔钱。已移除分组的聚合。