希望你能帮忙。我正在以以下格式将数据存储在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查询:
返回状态为“发布”的所有行
除非后面的行(由lastUpdate列确定)具有相同的ArticleId,并且状态为Deleted。
因此,在下面的示例中,查询应该只返回ArticlePK为4的行。由于ArticlePK 3所在的行,ArticlePK 2的行将不返回。
我试过几件事,但都没有成功。我相信这只需要轻轻一推就能帮到我,所以如果你有什么建议,我很乐意听听。
谢谢,

最佳答案

您可以使用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)

DEMO

关于mysql - 根据其他行的条件选择行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17127733/

10-09 22:01