0

我敢肯定,对于一些在 SQL 中有所了解的人来说,这将非常简单,但我认为它需要一个子查询或其他东西。我有一个表,其中基本上有大量订单号和来自 XML API 的回复列。失败或成功。

每次请求后都会在数据库中插入一个全新的行。因此,一个订单号可能有 5 次失败,并且在第 6 次尝试时插入一条记录说成功。

我怎样才能放出旁边只有失败状态的订单号?

这将使我能够弄清楚哪些记录需要查看在 API 请求中持续失败的记录。

4

5 回答 5

1

试试这个,通过使用主键 (order_id) 对订单进行分组

SELECT * FROM
(
    SELECT GROUP_CONCAT(status) as status_combined, order_id
    FROM orders 
    GROUP BY order_id  
) AS order_tmp
WHERE status_combined NOT LIKE '%SUCCESS%'

Edit(根据提问者的评论)

SELECT * FROM
(
    SELECT GROUP_CONCAT(status) as status_combined, order_id
    FROM orders 
    JOIN certificates ON certificates.Ordernumber = orders.OrderNumber
    GROUP BY order_id  
) AS order_tmp
WHERE status_combined NOT LIKE '%SUCCESS%'

请确保您需要根据“Ordernumber”或“order_id”加入

于 2013-01-31T10:18:24.770 回答
0

试试这个

select m.*
from Main m
join Transactiontable tt
on m.orderid = tt.orderid
group by tt.status , m.orderid
having count(case when tt.status = "failed") = count(tt.status)
于 2013-01-31T10:17:54.770 回答
0

您可以使用 where 子句使用简单的 sql 查询:

select * 
from some_table 
where Column_From_some_table_has_value = your_particular_value 

够了。

你可以看看如何在 sql 中使用 where 子句

谢谢

于 2013-01-31T10:19:53.957 回答
0

这可能是最干净的方法:

select *
from mytable
where id in (
    select id
    from mytable
    group by id
    having sum(status = 'SUCCESS') = 0)
于 2013-02-01T02:58:08.030 回答
0

我不喜欢@Minesh 的回答,因为它同时使用聚合函数和LIKE运算符。这两者都可能导致性能问题,因为没有任何索引可以帮助查询完成工作中的困难部分。该LIKE子句尤其需要对数据库进行大量工作,因为它需要扫描每个结果。

我对 SQL Server 更熟悉,但这应该适合你:

SELECT *
FROM Orders
WHERE OrderNumber NOT IN (
        SELECT OrderNumber
        FROM Orders
        WHERE Status = 'SUCCESS')
    AND OrderNumber NOT IN (
        SELECT OrderNumber
        FROM Certificates
        WHERE OrderStatus = 'CANCELLED')
于 2013-02-21T13:19:16.607 回答