1

2 つの類似した結果 (最も古い結果) から最後の結果を取得しようとしています。

FromUser | ToUser | Message | Date
User1    | User2  | hi      | 01/01/2013 20:00
User1    | User2  | hi later| 01/01/2013 21:00
User5    | User2  | hi      | 01/01/2013 20:01
User5    | User2  | hi later| 01/01/2013 21:01

SELECT        
    CM.FromUser, CM.ToUser, CM.Message, CM.Date, 
    U.UserId, U.UserFullName, U.UserName, U.UserPhoto
FROM
    ConversationMessages AS CM 
INNER JOIN
    Users AS U ON U.UserName = CM.FromUser
WHERE
    CM.ToUser = @user
ORDER BY 
    CM.Date DESC 

最初にユーザー 5 hi later をリストし、2 番目に user1 hi later をリストする必要があります (日付では user5 の方が新しいです)。基本的に最後の行のみがグループ化されFromUser、すべて日付順に並べられます。私はSQLで役に立たず、ここで多くの提案を試みましたが、何も機能しませんでした

4

2 に答える 2

1

ではなく、これにはウィンドウ関数を使用しますgroup by

select FromUser, ToUser, Message, [Date], UserId, UserFullName, UserName, UserPhoto
from (SELECT CM.FromUser, CM.ToUser, CM.Message, CM.Date, U.UserId,
             U.UserFullName, U.UserName, U.UserPhoto,
             row_number() over (partition by CM.FromUser, CM.ToUser order by [Date] desc) as seqnum
      FROM ConversationMessages CM INNER JOIN
           Users U
           ON U.UserName = CM.FromUser
      WHERE  CM.ToUser = @user
     ) s
WHERE seqnum = 1
ORDER BY CM.Date DESC ;
于 2013-09-09T22:21:19.820 に答える