SQL查询:删除除最近xx之外的所有行

时间:2010-02-26 18:53:10

标签: .net sql sql-server linq-to-sql

我正在编写一个脚本来定期检查RSS源,并需要删除旧文章。我发现这个答案看起来非常接近我正在寻找的内容:SQL query: Delete all records from the table except latest N?

我需要一个类似的解决方案,除了它每个Feed保留N篇文章(而不是一般的N篇文章)。每篇文章都有一个名为“RSSFeedID”的字段,该字段引用另一个表中的特定Feed。因此,对于每个RSSFeedID,我只需要保留N篇文章。

有关如何做到这一点的任何想法?原始SQL查询或LINQ-to-SQL代码都非常有用。谢谢!

2 个答案:

答案 0 :(得分:1)

如果你的两个表名为RSSFeeds,RSSPosts,这就是你如何做到的。 Pseudocode 提供。

idList = query("SELECT unique id FROM RSSFeeds");
for each id in idList
    query("
    DELETE FROM RSSPosts 
    WHERE id NOT IN 
        (SELECT id 
         FROM RSSPosts 
         WHERE RSSFeedId = @id
         ORDER BY id DESC 
         LIMIT 10)
    ");
end

答案 1 :(得分:0)

这太过分了。当您使用相同的方法向特定Feed添加新文章时,为什么不在每个Feed的基础上执行此操作?