我的存储过程有一个临时表,其中包含一列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中派生表。是否有其他方法可以重写,或者使用不同的查询方法来获得此功能?
答案 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)