Get only latest row, grouped by a column

后端 未结 5 1505
醉酒成梦
醉酒成梦 2021-01-23 03:27

I have a large data-set of emails sent and status-codes.

ID Recipient           Date       Status
 1 someone@example.com 01/01/2010      1
 2 someone@example.com         


        
5条回答
  •  轮回少年
    2021-01-23 04:08

    SELECT
        M.Recipient,
        C.EmailCount,
        M.Status
    FROM
        (
        SELECT Recipient, Count(*) EmailCount
        FROM Messages
        GROUP BY Recipient
        ) C
        JOIN
        (
        SELECT Recipient, MAX(Date) AS LastDate
        FROM Messages
        GROUP BY Recipient
        ) MD ON C.Recipient = MD.Recipient
        JOIN
        Messages M ON MD.Recipient = M.Recipient AND MD.LastDate = M.Date
    ORDER BY
        Recipient
    

    I've found aggregates mostly scale better then ranking functions

提交回复
热议问题