簡體   English   中英

Select 來自按另一個 ID 分組的表的最新(前 1)

[英]Select most recent (top 1) from table grouped by another ID

我有一個表,其中包含用戶發送的消息和來自用戶的消息。 我如何使用 SQL 到 select 用戶發送的所有消息。 我想按 MessageSenderUserID 對結果進行分組。 我還想只返回每個收件人的最新消息。

我試圖在 having 子句中使用 MAX,但似乎這不是正確的解決方案。

我最好將其描述為以下查詢的組合:

SELECT TOP 1 MessageID, MessageSent, MessageSenderUserID, MessageRecipientUserID
FROM [Messaging_Message]
WHERE MessageSenderUserID = 799
ORDER BY MessageSent DESC

SELECT MessageSenderUserID
FROM [Messaging_Message]
GROUP BY MessageSenderUserID

謝謝!

我最近才學會這種(最令人驚訝和有趣的)方法來獲得組中的前 1 項:

select top 1 with ties
    MessageID, 
    MessageSent, 
    MessageSenderUserID, 
    MessageRecipientUserID
from [Messaging_Message]
order by row_number() over (partition by MessageSenderUserID 
                            order by MessageSent desc)

技巧按順序排列 - 結果按部分分組並按排序鍵排序,導致每個組的第一行接收數字 1。 With ties返回所有。 哦,應用機械師的快樂!

WITH TestTableCTE AS
(
    SELECT RN = ROW_NUMBER() OVER(PARTITION BY MessageSenderUserID ORDER BY MessageSent DESC),
           MessageID, MessageSent, MessageSenderUserID, MessageRecipientUserID
    FROM   [Messaging_Message]
)

SELECT MessageID, MessageSent, MessageSenderUserID, MessageRecipientUserID FROM TestTableCTE WHERE RN=1

這假設用戶不能同時發送多條消息(在這種情況下,它會為用戶顯示多條消息):

SELECT a.MessageID, a.MessageSent, a.MessageSenderUserID, a.MessageRecipientUserID
FROM Messaging_Message AS a
    JOIN (
        SELECT MessageSenderUserID, MAX(MessageSent) AS MessageSent
        FROM Messaging_Message
        GROUP BY MessageSenderUserID
    ) AS b ON a.MessageSenderUserID = b.MessageSenderUserID
        AND a.MessageSent = b.MessageSent

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM