2011-06-12 104 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

相關問題