GROUP BY
を使用している場合 通常、集約関数
があります 、あなたが提供した 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
を使用してそれを行う賢い方法があります 条項 しかし、うまくいけば、これで何かを解決できない場合は、他の誰かがあなたの問題を解決するのに役立つでしょう.