按给定ID删除早于最大日期的行

时间:2015-01-23 12:55:50

标签: sql database stored-procedures sybase

我在存储过程中创建了一个简单的临时表,由一个ID字段(不是主键)和一个与之关联的日期组成。我想要做的是只保留每个ID

具有最新日期的ID /日期记录

我写了以下内容,但似乎没有做我想要的事情

DELETE #summary
FROM #summary s1, #summary s2
WHERE s1.evt_dte != (
SELECT MAX(s1.evt_dte)
    FROM #summary s1, #summary s2
    WHERE s1.evt_or_cat_num = s2.evt_or_cat_num)
AND s1.evt_or_cat_num = s2.evt_or_cat_num

我尝试做的是将表与自身进行比较,并删除存储的每个evt_or_cat_num的evt_dte小于MAX的所有记录。

任何想法如何调整才能正常工作?

1 个答案:

答案 0 :(得分:1)

您可以加入要保留的数据,并删除无法建立链接的所有内容

DELETE s1
FROM #summary s1
left JOIN 
(
   select evt_or_cat_num, MAX(evt_dte) maxdt
   from #summary
   group evt_or_cat_num
) s2 on s1.evt_or_cat_num = s2.evt_or_cat_num 
    and s1.evt_dte = s2.maxdt
where s2.evt_or_cat_num is null