【问题标题】:How to delete the last record如何删除最后一条记录
【发布时间】:2011-11-03 04:28:17
【问题描述】:

使用 SQL Server 2000

表格

ID Date Value

001 23-02-2009 300
001 24-02-2009 400
001 25-02-2009 150
002 23-02-2009 300
002 24-02-2009 400
003 23-02-2009 150
.....
.....

从上表中我想删除每个 id 的最后日期。

如何查询

预期输出

 ID Date Value

    001 23-02-2009 300
    001 24-02-2009 400
    002 23-02-2009 300
    .....
    .....
    .....

需要查询帮助

【问题讨论】:

标签: sql sql-server tsql sql-server-2000


【解决方案1】:

您可以通过在DELETE 语句中执行子选择和连接来实现此目的。例如:

DECLARE @myTable TABLE(ID VARCHAR(3), [Date] DATETIME, Value INT)
INSERT INTO @myTable VALUES('001', CONVERT(DATETIME, '23-02-2009', 103), 300)
INSERT INTO @myTable VALUES('001', CONVERT(DATETIME, '24-02-2009', 103), 400)
INSERT INTO @myTable VALUES('001', CONVERT(DATETIME, '25-02-2009', 103), 150)
INSERT INTO @myTable VALUES('002', CONVERT(DATETIME, '23-02-2009', 103), 300)
INSERT INTO @myTable VALUES('002', CONVERT(DATETIME, '24-02-2009', 103), 400)
INSERT INTO @myTable VALUES('003', CONVERT(DATETIME, '23-02-2009', 103), 150)

DELETE @myTable
FROM @myTable M
JOIN (SELECT ID, MAX([Date]) as [Date] FROM @myTable GROUP BY [ID]) G
    ON G.ID = M.ID AND G.[Date] = M.[Date]

SELECT * FROM @myTable

请注意,我针对 SQL Server 2005 测试了此 SQL,但我相信它也应该在 SQL Server 2000 中工作。

【讨论】:

  • +1 可能是要走的路,但要注意 {ID, Date} 是否没有唯一约束
  • @Conrad 好点。如果 {ID, Date} 不是唯一的,那么这个问题在 SQL Server 2000 中变得更加困难。OMG Ponies 在对问题的评论中发布的链接解释了原因。在这种情况下,我想 ROW_NUMBER 解决方案可以用于 SQL Server 2005 及以后的版本。
猜你喜欢
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
相关资源
最近更新 更多