2011-06-12 63 views
4

我想执行一个SQL命令,它应该在输入数据库的最后一行上绘制。SQL Server - 如何选择每个用户的最新记录?

基本上,当用户提交最后一个线程时(例如在本论坛中),它会将用户重定向到一个页面,其中包含线程标题,线程段和数据,例如用户名和线程提交时间。

我开始工作的声明:

SELECT @UserID, u.UsersName, t.ThreadTitle, t.ThreadParagraph 
FROM Users as u 
INNER JOIN Threads as t ON u.UserID = t.UserID 
Where @UserID = t.UserId 

我已经是我需要添加一些语句或聚合函数返回我是在线程表中输入的最后一行的问题。我该怎么做呢?我需要添加什么?

+0

如果你插入的数据到表与一个indentity列,你可以使用“SELECT @@ IDENTITY FROM YourTable”来获得ID。使用ID可以选择你需要的行。 – Zachary 2011-06-12 07:19:38

回答

9

在MS SQL中,您可以使用TOP 1进行此操作,还需要按您创建的日期时间列降序排列。

SELECT TOP 1 @UserID, u.UsersName, t.ThreadTitle, t.ThreadParagraph 
FROM Users as u 
    INNER JOIN Threads as t ON u.UserID = t.UserID 
Where @UserID=t.UserId 
ORDER BY [YourDateTimeFiled] DESC 
+0

因此top 1会给我插入的最后一个线程..如果两个用户在同一时间附近插入一个线程会怎么样......我的字段是datetime ..它有多准确? – Matrix001 2011-06-12 07:21:40

+3

Matrix001 - 'ORDER BY'将会排序,所以具有最大日期时间的列将是第一个。 TOP 1将确保所有其他行都被忽略。此外,根据我的理解,无论您通过具体用户“@ UserID = t.UserId”进行过滤,其他用户都做了什么,对吧? – 2011-06-12 07:32:19

0

我不知道我有完全明白你的问题,但如果你有一个线程ID(在你的线程表的主键),试试这个

SELECT @UserID, u.UsersName, t.ThreadTitle, t.ThreadParagraph 
FROM Users as u 
INNER JOIN Threads as t ON u.UserID = t.UserID 
Where @UserID=t.UserId 
ORDER BY t.id DESC 
LIMIT 0, 1 
+0

SQL Server没有限制 – gbn 2011-06-12 07:55:33

+0

@gbn他没有在他的第一个问题中提到Sql Server;) – 2011-06-12 08:21:27

+0

啊,没有看到。我通常以c#+ asp.net作为线索... – gbn 2011-06-12 08:23:39

相关问题