mysql - 根据其他行的条件选择行

标签 mysql sql

希望能帮到你。我正在以下列格式将数据存储在 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,状态为已删除。

因此,在下面的示例中,查询应该只返回 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/

相关文章:

sql - 如何以日期为列动态旋转

mysql - 未找到列 : 1054 Unknown column '` default `' in ' where clause', 查询为 : SELECT `main_table` . * FROM `fastimporter_attributes`

mysql - 选择项目,然后选择 parent 的名字

sql - Derby 对 NULL 值的处理

mysql - 随机和重复的顺序?

php - Laravel Model protected $dateFormat - 如何删除秒数?

mysql - 使用 JOINS、ORDER BY 和数据透视表

sql获取信息,但顺序错误

php mysql插入多个单词

php - 如何在 mysqli_fetch_object 中获取计数帮助我