正しいレコードを取得しようとしていますが、理由により、Having 句に問題があると思います。誰か助けてもらえますか?
ケース 1: order_id = 1 (新規注文) の行を選択しようとしているが、同じ注文 ID を持つ複数のレコードが存在してはならない
ケース 2: order_id = 2 (印刷された注文) の行を選択しますが、新しい注文も選択してケース 1 を適用する必要があります。同じオーダー ID を持つ 1 つのレコードより)
order_id
= 注文の ID
status_id = 異なるステータス ID 例: 1 = 新規、2 = 印刷済み、3 = 処理中など...
status_change_by = 注文ステータスを新規から印刷済みに変更した管理者の ID処理...
order_id | status_id | status_change_by
1 | 1 | (NULL)
1 | 2 | 12
1 | 3 | 12
2 | 1 | (NULL)
3 | 1 | (NULL)
4 | 1 | (NULL)
1 | 4 | 13
5 | 1 | (NULL)
3 | 2 | (NULL)
これが私の単純な mySQL クエリです。
SELECT * from order_tracking
where status_id = 1
group by order_id
having count(order_id) <= 2;
参照用に SQL フィドルも作成しました。間違っているかどうか、または CASE または IF ステートメントを使用した複雑なクエリが必要かどうかを確認してください。
http://sqlfiddle.com/#!2/16936/3
このリンクが機能しない場合は、次のコードで作成してください:
CREATE TABLE order_tracking
(
track_id int auto_increment primary key,
order_id int (50),
status_id int(20),
status_changed_by varchar(30)
);
挿入は次のとおりです。
INSERT INTO order_tracking
(order_id, status_id, status_changed_by)
VALUES
(1,1,''),
(1,2,12),
(1,3,12),
(2,1,''),
(3,1,''),
(4,1,''),
(1,4,13),
(5,1,''),
(3,2,'');
あなたの早い応答は高く評価されるべきです! 時間をありがとう。
欲望の結果:
Case:1これは非常に単純で、結果は次のようになります: レコードが 1 つ以下の新規注文のみ
Order_id | status_id | status_changed_by
2 | 1 | (NULL)
4 | 1 | (NULL)
3 | 1 | (NULL)
ケース 2 の結果:
Order_id | status_id | status_changed_by
1 | 4(max id)| (NULL)
2 | 1 | (NULL)
4 | 1 | (NULL)
3 | 2(max id)| (NULL)