我有一个表messages
,列Id, SenderAccountId, ReceiverAccountId, Message, DateTime
。SQL - ORDER BY,GROUP BY,ID
当我尝试只用这个查询选择每个SenderAccountId
最新的消息:
SELECT *
FROM messages
GROUP BY SenderAccountId
ORDER BY DateTime ASC
我得到这个错误:
Msg 8120, Level 16, State 1, Line 1
Column 'Chats.Id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
但是,当我改变SELECT到
SELECT SenderAccountId, ReceiverAccountId, Message, DateTime
我的错误只是移动到下一列(如:SenderAccountId
)
有没有办法让另一个查询得到正确的结果?
没有聚合函数(SUM,MAX,等等)在您的查询的“分组依据”。 – Jon
我必须得到程序其余部分的所有列,所以聚合函数不是一个不幸的选项 – BasTolen
当在SQL Server中使用GROUP BY时,规则非常简单:** SELECT中的每个**列列的列表(你真的应该使用**明确的列列表** - 不只是'*'!)**必须是**(SUM,COUNT,AVG,MIN,MAX),**或者** it **必须包含在'GROUP BY'语句中。如果您根本没有任何聚合,“GROUP BY”确实根本没有任何意义... –