SQL更新 - 根据多个条件省略MIN数量的记录

时间:2015-01-27 16:53:43

标签: sql postgresql sql-update window-functions

我有一个“新闻”表,其中包含一对多的“NewsState”表。需要在NewsState字段上更新名为“expired”(设置为true),具体取决于“新闻”表中“日期”字段的值,这些条件

  • 如果日期超过24小时,则相关的新闻日应该过期。
  • 如果在过去24小时内有少于50个“新闻”(假设有10个新闻)那么超过24小时的40个最新新闻也应该没有过期,所以总是MIN 50未到期。
  • 如果过去24小时内有超过50条新闻,他们的新闻报也不应该过期。

我没有想到的解决方案,其中不包含一些重要的子选择和IN子句。

1 个答案:

答案 0 :(得分:1)

可以使用window functions,f.ex。: (我假设你在news_id表中有一个News作为主键 - 也就是NewsState中的外键 - 如果不是这样的话,你可以使用{{ 1}}构造函数用于比较ROW()表达式中的多个列。我还假设IN属于expired。)

boolean

Some SQLFiddle samples(为简单起见,使用不同的规则编号)。