जब आप 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
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
मुझे इस तरह की उप-प्रश्नों का उपयोग करना पसंद नहीं है, लेकिन मैं एक डेवलपर हूं जो डीबीए नहीं है, और उपरोक्त सीमित है कि यदि समान Chat_Relation_Id
वाले आइटम हैं और DateTime
तो डुप्लीकेट अभी भी घटित होंगे। HAVING
का उपयोग करके इसे करने का शायद एक चतुर तरीका है खंड
लेकिन उम्मीद है कि अगर यह आपको काम करने के लिए कुछ नहीं देता है तो इससे किसी और को आपकी समस्या का समाधान करने में मदद मिलेगी।