0

これはSQLで手がかりになっている人にとっては非常に簡単だと思いますが、サブクエリか何かが必要だと思います。基本的に大量の注文番号を含むテーブルと、XMLAPIからの応答列があります。FAILまたはSUCCESSのいずれか。

リクエストが行われるたびに、新しい行がDBに挿入されます。したがって、1つの注文番号に対して5回の失敗が発生する可能性があり、6回目の試行で、SUCCESSというレコードが挿入されます。

横にFAILステータスしかない注文番号を出すにはどうすればよいですか?

これにより、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

LIKE集計関数と演算子の両方を使用するため、@Mineshの回答は好きではありません。作業の難しい部分でクエリを支援するインデックスがないため、どちらもパフォーマンスの問題を引き起こす可能性があります。この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 に答える