Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 基于列和状态列的组合获取记录的查询_Mysql_Sql_Database_Subquery - Fatal编程技术网

Mysql 基于列和状态列的组合获取记录的查询

Mysql 基于列和状态列的组合获取记录的查询,mysql,sql,database,subquery,Mysql,Sql,Database,Subquery,我有一张这样的桌子 +----------+----------+-----------+------------+ | id | group | info | status | +----------+----------+-----------+------------+ | 1 | 1 | VALUE123 | EXECUTED | | 2 | 1 | VALUE123 | INPROGRE

我有一张这样的桌子

+----------+----------+-----------+------------+
|       id |    group |      info | status     |
+----------+----------+-----------+------------+
|        1 |        1 | VALUE123  | EXECUTED   |
|        2 |        1 | VALUE123  | INPROGRESS |
|        3 |        1 | VALUE123  | UPLOADED   |
|        4 |        1 | VALUE123  | UPLOADED   |
|        5 |        1 | VALUE123  | UPLOADED   |
|        6 |        1 | VALUE123  | UPLOADED   |
|        7 |        2 | VALUE123  | EXECUTED   |
|        8 |        2 | VALUE123  | UPLOADED   |
|        9 |        2 | VALUE123  | UPLOADED   |
|       11 |        2 | VALUE123  | UPLOADED   |
|       12 |        2 | VALUE123  | UPLOADED   |
|       13 |        2 | VALUE123  | UPLOADED   |
+----------+----------+-----------+------------+
我正在尝试创建一个查询,该查询应该给我一个记录,以便表中的no行应该具有相同的“group”和“info”组合,而不会具有“INPROGRESS”中的状态

但是,由于我在形成如此复杂的查询方面知识有限,所以我无法取得多大进展

例如,查询将从id[7-13]中的任意一行中提供一条记录,而不是从第[1-6]行

原因:由于id 2的状态为“INPROGRESS”,行[1-6]将不满足条件


希望我的查询有意义。

您可以使用
不存在

select t.*
from mytable t
where not exists (
    select 1
    from mytable t1
    wher t1.grp = t.grp and and t1.info = t.info and t1.status = 'INPROGRESS'
)
或者,在MySQL 8.0中,您可以使用窗口函数执行此操作:

select *
from (
    select t.*, 
        max(status = 'INPROGRESS') over(partition by grp, info) as flag
    from mytable t
) t
where flag = 0

注意:
group
是一个语言关键字(如
groupby
),因此不是一个很好的列名选择;我在查询中将其重命名为
grp

欢迎使用SO。请看:非常感谢@GMB。你的问题对我有用。我将它标记为已解决。