2

希望您能提供帮助。我以以下格式将数据存储在 MySQL 数据库中:

ArticlePK   ArticleId   Status      Title               lastupdate
1           1           Draft       Peter Pan           2013-06-14 07:24:05
2           1           Published   Peter Pan           2013-06-15 08:00:05
3           1           Deleted     Peter Pan           2013-06-20 11:30:12
4           2           Published   Growth of the Soul  2013-06-14 07:24:05

我需要一个 SQL 查询:

  • 返回所有具有发布状态的行
  • 除非具有相同 ArticleId 的后一行(由 lastUpdate 列确定)的状态为已删除。

因此,在下面的示例中,查询应该只返回 ArticlePK 为 4 的行。由于 ArticlePK 为 3 的行,ArticlePK 2 的行将不会返回。

我尝试了几件事,但没有任何效果。我相信只需轻轻一推就能帮助我,所以如果您有任何建议,我很乐意听取他们的意见。

谢谢,

4

2 回答 2

3

您可以使用NOT EXISTS

SELECT articlepk, articleid, status, title, lastupdate 
FROM   tablename t1 
WHERE  status = 'Published' 
       AND NOT EXISTS (SELECT 1 FROM   tablename t2 
                       WHERE  t1.articleid = t2.articleid 
                         AND  t2.status = 'Deleted' 
                         AND  t2.lastupdate > t1.lastupdate) 

演示

于 2013-06-15T20:54:26.270 回答
2
SELECT a.*
FROM table1 a
LEFT JOIN table1 b ON (b.ArticleId = a.ArticleId and b.Status ='Deleted' and 
 b.lastupdate > a.lastupdate)
WHERE a.Status='Published' and b.ArticlePK IS NULL
于 2013-06-15T20:54:00.550 回答