[英]MySQL SELECT distinct with multiple similar rows
我正在努力获取正确的数据返回,我有一个具有以下数据结构的表:
# order_id, name
'10434', 'docs_sent'
'10433', 'placed'
'10433', 'docs_sent'
'10433', 'agreement_received'
'10432', 'placed'
'10431', 'placed'
'10431', 'docs_sent'
'10430', 'placed'
'10430', 'docs_sent'
'10430', 'agreement_received'
'10429', 'placed'
'10429', 'docs_sent'
'10429', 'agreement_received'
'10428', 'placed'
'10428', 'docs_sent'
'10427', 'placed'
我想做的是返回一个唯一的“ order_id”,其中“名称”不包括concept_received。 因此,为澄清起见,我正在寻找一个订单号“ order_id”的列表,其中该订单号没有任何记录,带有“ concept_received”的记录。问题是每个订单都有多个条目,我似乎无法正确输入。请帮助!
输出应类似于:
# order_id
'10434'
'10432'
'10431'
'10428'
'10427'
您可以通过 ORDER_ID只保留无 “agreement_received”记录那些order_ids想组 。
select order_id
from mytable
group by order_id
having sum(name = 'agreement_received') = 0;
(这使用MySQL的特殊布尔处理。False = 0,True =1。在其他dbms中,您将不得不使用sum(case when name = 'agreement_received' then 1 else 0 end)
。)
select distinct order_id
from orders
where name != 'agreement_received';
那对你有用吗?
尝试类似:
SELECT order_id
FROM MyTable
WHERE name <> 'agreement_received'
GROUP BY order_id
HAVING COUNT(order_id) = 1
如果您的表名是t
:
select distinct t1.order_id
from t as t1
where t1.order_id not in
(select t2.order_id
from t as t2
where t2.name = 'agreement_received')
输出:
+----------+
| order_id |
+----------+
| 10434 |
| 10432 |
| 10431 |
| 10428 |
| 10427 |
+----------+
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.