Using MS SQL Server 2014. I need to select the row where (userid=1 or memberid=1) that has the max(messageid) value from all the messages where the user #1 sent or received messages ordered by messageid desc
I tried the solution here: How can I SELECT rows with MAX(Column value), DISTINCT by another column in SQL?, but since a user can send OR receive messages, the solution only partly solves my problem.
Message Table
messageid  userid  memberid  message  created
--------------------------------------------------------------
9          4       1         Hi 9     2016-05-09 01:50:59.423 
8          4       1         Hi 8     2016-05-09 01:50:43.950
7          1       4         Hi 7     2016-05-09 01:50:35.310
6          1       4         Hi 6     2016-05-09 01:50:25.887
5          1       2         Hi 5     2016-05-08 23:49:41.610
11         2       1         Hi 11    2016-05-09 03:26:42.267
12         1       3         Hi 12    2016-05-09 05:06:11.030
1          1       2         Hi 1     2016-05-08 22:37:57.803
Expected Result
messageid  userid  memberid  message  created
--------------------------------------------------------------
12         1       3         Hi 12    2016-05-09 05:06:11.030
11         2       1         Hi 11    2016-05-09 03:26:42.267
9          4       1         Hi 9     2016-05-09 01:50:59.423 
Query I tried
DECLARE @userid bigint
SET @userid=1
SELECT mm.*
FROM messages mm
INNER JOIN
    (SELECT memberid AS otherperson, MAX(m.messageid) AS MaxID
    FROM messages m
    WHERE m.userid=@userid
    GROUP BY memberid   
    ) groupedmm 
ON mm.memberid = groupedmm.otherperson 
AND mm.messageid = groupedmm.MaxID
UNION
SELECT mmm.*
FROM messages mmm
INNER JOIN
    (SELECT userid AS otherperson, MAX(m.messageid) AS MaxID
    FROM messages m
    WHERE m.memberid=@userid
    GROUP BY userid 
    ) groupedmmm 
ON mmm.userid = groupedmmm.otherperson 
AND mmm.messageid = groupedmmm.MaxID
Above Query Returned
messageid  userid  memberid  message  created
--------------------------------------------------------------
5          1       2         Hi 5     2016-05-08 23:49:41.610
7          1       4         Hi 7     2016-05-09 01:50:35.310
9          4       1         Hi 9     2016-05-09 01:50:59.423
11         2       1         Hi 11    2016-05-09 03:26:42.267 
12         1       3         Hi 12    2016-05-09 05:06:11.030
 
     
     
    