當您使用GROUP BY
你通常會有aggregate functions,你提供的實際上並沒有在任何聚合函數的SQL所以沒有必要爲它進行分組。
SELECT
m.Message_Id
, m.Chat_Relation_Id AS relation_id
, m.SenderId AS datetime
, m.Text_Message
, m.Subject
, m.DateTime
FROM
[AppResource].[dbo].[ChatMessage] AS m
INNER JOIN [AppResource].[dbo].[chatRelation] AS r
ON r.Chat_Relation_Id = m.Chat_Relation_Id
WHERE
r.User1Id=1
GROUP BY
m.Chat_Relation_Id
ORDER BY
m.DateTime desc
錯誤被拋出,因爲所有的非聚合列必須在GROUP BY
子句中被定義爲這定義了其他(聚集)列是如何計算的。在你的例子中,並給出所描述的問題,我猜只是刪除GROUP BY
將解決你的問題。評論關於重複條目後
SELECT
m.Message_Id
, m.Chat_Relation_Id AS relation_id
, m.SenderId AS datetime
, m.Text_Message
, m.Subject
, m.DateTime
FROM
[AppResource].[dbo].[ChatMessage] AS m
INNER JOIN [AppResource].[dbo].[chatRelation] AS r
ON r.Chat_Relation_Id = m.Chat_Relation_Id
WHERE
r.User1Id = 1
ORDER BY
m.DateTime DESC
編輯:
下面的查詢將獲得最新的每個Chat_Relation_Id
SELECT
m.Chat_Relation_Id AS relation_id
, MAX(m.DateTime) AS maxDateTime
FROM
[AppResource].[dbo].[ChatMessage] AS m
INNER JOIN [AppResource].[dbo].[chatRelation] AS r
ON r.Chat_Relation_Id = m.Chat_Relation_Id
WHERE
r.User1Id = 1
GROUP BY
m.Chat_Relation_Id
這是很不理想的條目,但可以作爲子查詢選擇相關文字如下:
SELECT
m.Message_Id
, m.Chat_Relation_Id AS relation_id
, m.SenderId AS datetime
, m.Text_Message
, m.Subject
, m.DateTime
FROM
(SELECT
subqueryMessage.Chat_Relation_Id AS relation_id
, MAX(subqueryMessage.DateTime) AS maxDateTime
FROM
[AppResource].[dbo].[ChatMessage] AS subqueryMessage
INNER JOIN [AppResource].[dbo].[chatRelation] AS subQueryRelation
ON subQueryRelation.Chat_Relation_Id = subqueryMessage.Chat_Relation_Id
WHERE
subQueryRelation.User1Id = 1
GROUP BY
subqueryMessage.Chat_Relation_Id
) AS mySubQuery
INNER JOIN [AppResource].[dbo].[ChatMessage] AS m
ON m.Chat_Relation_Id = mySubQuery.relation_id
AND m.DateTime = mySubQuery.maxDateTime
ORDER BY
m.DateTime DESC
我不喜歡使用這樣的子查詢,但我是一個開發人員而不是DBA,並且上面的限制是,如果有相同的項目Chat_Relation_Id
和DateTime
那麼重複仍然會發生。使用HAVING
Clause可能會有一個聰明的方法,但希望如果這不能讓你從中解決問題,將有助於其他人解決您的問題。
那麼 - 當使用group by時,您不能選擇不屬於group by子句或聚合函數的部分。而Message_Id不是你的組的一部分,也不是一個聚合函數。 (而且這兩個數字都不是你選擇的其他列) –
你能解釋一下你想要達到什麼嗎? – Szymon
但是,當我添加所有列進來選擇然後它給出了文本數據類型的錯誤。你能告訴我該怎麼辦? –