【问题标题】:Delete rows older than Max date by given ID按给定 ID 删除早于 Max date 的行
【发布时间】:2015-01-23 12:55:50
【问题描述】:

我在存储过程中创建了一个简单的临时表,由一个 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_dte 小于 MAX 的记录,以存储每个 evt_or_cat_num。

任何想法如何调整它以使其正常工作?

【问题讨论】:

    标签: sql database stored-procedures sybase


    【解决方案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
    

    【讨论】:

    • 谢谢,但问题是 Sybase 不允许在更新或删除语句的 from 子句中使用派生表。
    • 你试过了吗?在 MySQL 中它可以工作,因为表被放入带有子查询的临时表中
    • 嗯,试过了,上面提到的派生表不允许错误
    猜你喜欢
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    相关资源
    最近更新 更多