Mysql - 获取没有先前状态的行

标签 mysql sql

我有一个表来保存Sample状态。

 id     sample_id               previous_status     current_status  
 1      22216                   NULL                    1   
 2      22216                   1                       3   
 3      22221                   NULL                    1   
 4      22221                   1                       3   

我想找到在当前状态下没有条目的行为 1。

编辑(来自评论): 我想要 previous_status = 1、current status = 3 且没有 previous_status = null、current_status = 1 的示例 ID。

最佳答案

I want the sample ids which have previous_status = 1, current status = 3 AND no row with previous_status = null, current_status = 1

您可以使用相关子查询:

SELECT s1.sample_id
FROM Sample s1
WHERE previous_status = 1
  AND current_status = 3
  AND NOT EXISTS (SELECT 1
                  FROM Sample s2
                  WHERE s2.sample_id=s1.sample_id
                    AND s2.previous_status IS NULL
                    AND s2.current_status = 1);

SqlFiddleDemo


使用 GROUP BY:

SELECT sample_id
FROM Sample
GROUP BY sample_id
HAVING SUM(previous_status = 1 AND current_status = 3) > 0
   AND SUM(previous_status IS NULL AND current_status = 1) = 0;

SqlFiddleDemo2

关于Mysql - 获取没有先前状态的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34673399/

相关文章:

mysql - 如何查找查询次数最多的mysql数据库?

python - Django - 使用给定的 sql 转储来创建其他模型并填充数据

mysql - 使用 sum、where 条件和 group by 进行查询

mysql - 根据条件从不同的表中选择

mysql - 如何在Mysql中选择NOT IN,但考虑到区分大小写?

mysql 自动化

mysql - 使用 RJDBC 在 R 中创建 JDBC 驱动程序

c# 无法连接到任何指定的 MySQL 主机

php - $row=mysql_fetch_array($result);只返回偶数行

mysql - 显示同一表的列中可以具有相同数据的表中的数据