删除特定ID的最旧行 - Sybase派生表问题

时间:2015-01-23 23:01:58

标签: sql database stored-procedures sybase

我的存储过程有一个临时表,其中包含一列ID值。 ID可以多次出现在临时表中。临时表中还有一个Date列。我需要编写一个查询(Sybase数据库),它将删除不是每个ID的最大日期的所有条目。

ID    |  Date
12345 |  2015/01/23
98763 |  2015/01/22
12345 |  2015/01/20
98763 |  2015/01/21

所以在这种情况下

12345 | 2015/01/20 and 98763 | 2015/01/21 

条目将被删除。

我创建了以下内容:

DELETE #temp
FROM #temp t1
left JOIN 
(
   select ID, MAX(Date) maxdt
   from #temp t2
   group by ID
) t2 on t1.ID = t2.ID
  and t1.ID = t2.Date
where t2.ID is null

虽然事实证明Sybase(或至少我使用的版本)不允许在Delete或Update statememt中派生表。是否有其他方法可以重写,或者使用不同的查询方法来获得此功能?

1 个答案:

答案 0 :(得分:0)

下面的代码只留下最新的行:

delete #temp   
from #temp t       
where not exists(select 1
                 from #temp t2 
                 where t.id = t2.id
                 and t2.date < t.date)