2017-04-03 159 views
1

我有以下基本的SQL查詢:刪除表中的最後一行 - SQL

DELETE TOP (1) 
FROM dbo.userPasswordHistory 
WHERE UserId IN (SELECT Id FROM dbo.user WHERE LogonId = @UserLogonId) 

我想刪除dbo.userPasswordHistory表最近的條目,但DELETE TOP (1)被刪除最早的條目,不是最近的。因此,例如,如果dbo.userPasswordHistory表包含指定用戶的5行,那麼它就是我想要刪除的最近條目。

我該如何訂購基於名爲LastModifiedTime的列的表格還是我可以指定底部或最後一個方法?

+0

包括適當的標籤。頂部不是mysql關鍵字。是從MySQL或SQL服務器的查詢並更新您的問題與示例數據和所需的結果集 –

回答

3

你可以用一個子查詢或CTE這樣做:

DELETE t 
FROM (SELECT TOP (1) uph.* 
     FROM dbo.userPasswordHistory uph 
     WHERE UserId IN (SELECT Id 
         FROM dbo.user 
         WHERE LogonId = @UserLogonId 
        ) 
     ORDER BY LastModifiedTime DESC 
    ) t; 
+0

謝謝,這正是我正在尋找。但是,'t'表示什麼?我知道這是需要的,因爲沒有聲明不會執行。 – bez91

+1

@ bez91。 。 。 't'是一個表別名。 SQL Server需要'from'子句中的子查詢的表別名。 –