Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:从分组依据中选择最后一个结果_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

SQL Server:从分组依据中选择最后一个结果

SQL Server:从分组依据中选择最后一个结果,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在尝试从2个类似的结果(最旧的结果)中检索最后一个结果 它应该先列出USER5HI,然后再列出USER1HI(user5按日期更新)。只有最后一行基本上按用户的分组,然后按日期排序。我对sql一窍不通,在这里尝试了许多建议,但都没有成功您想使用窗口函数来实现这一点,而不是分组方式: select FromUser, ToUser, Message, [Date], UserId, UserFullName, UserName, UserPhoto from (SELECT CM.FromUs

我正在尝试从2个类似的结果(最旧的结果)中检索最后一个结果


它应该先列出USER5HI,然后再列出USER1HI(user5按日期更新)。只有最后一行基本上按用户的
分组,然后按日期排序。我对sql一窍不通,在这里尝试了许多建议,但都没有成功

您想使用窗口函数来实现这一点,而不是
分组方式

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 ;

这是您正在寻找的标准SQL:

SELECT * FROM ConversationMessages cm1
LEFT JOIN ConversationMessages cm2
ON cm1.fromUser = cm2.fromUser AND cm1.date < cm2.date
WHERE cm2.date IS NULL AND cm1.toUser = 'User2'
ORDER BY cm1.date DESC

小提琴。

了不起的戈登,我需要的正是谢谢你!考虑到我编程的程度,我真的需要学习更多的基本sql:PGordon我有一个问题,请帮助,如果最后一条消息是来自fromuser的,它不会显示,这是用于facebooks之类的消息应用程序,我需要它像facebook消息一样工作,返回的用户名和用户名始终来自ToUser,但如果最后一条消息来自fromuser,则它将显示fromuser的消息和日期,但随后是ToUser的用户名和用户名,或者,如果它来自ToUser,则此代码工作正常。只需将fromusers显示为最后一个,但也按touser id分组即可。你明白了吗?希望你能帮我说我解释错了,就好像亚当登录了,最后一条消息来自用户亚当·图瑟·疯狂谷,它会显示疯狂谷用户名+全名,但亚当的消息/日期。如果它来自用户crazyguy,touser adam,那么它将来自crazyguy。充当conversations@user服务器是否已登录user@user1311546 . . . 我认为这可能是另一个问题。两个答案对问题的解释相同,提供了不同的解决方法。
SELECT * FROM ConversationMessages cm1
LEFT JOIN ConversationMessages cm2
ON cm1.fromUser = cm2.fromUser AND cm1.date < cm2.date
WHERE cm2.date IS NULL AND cm1.toUser = 'User2'
ORDER BY cm1.date DESC
FromUser | ToUser | Message | Date User5 | User2 | hi later| 01/01/2013 21:01 User1 | User2 | hi later| 01/01/2013 21:00