2017-04-03 233 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'子句中的子查询的表别名。 –