x
CREATE TABLE logistics (
id int auto_increment primary key,
campaign VARCHAR(255),
process_status VARCHAR(255),
delivery_type VARCHAR(255),
quantity INT
);
INSERT INTO logistics
(campaign, process_status, delivery_type, quantity
)
VALUES
("C001", "offer", "fedex", "500"),
("C001", "offer", "fedex", "200"),
("C001", "order", "ubs", "400"),
("C001", "shipped", "ubs", "100"),
("C002", "offer", "fedex", "800"),
("C002", "offer", "fedex", "100"),
("C002", "order", "fedex", "650"),
("C002", "shipped", "fedex", "250"),
("C003", "offer", "fedex", "730"),
("C003", "order", "fedex", "620"),
("C003", "shipped", "dhl", "530"),
("C004", "order", "fedex", "200"),
("C004", "shipped", "fedex", "130"),
("C005", "order", "fedex", "900"),
("C005", "shipped", "ubs", "475"),
("C006", "order", "fedex", "635");
Expected Result
campaign process_status delivery_type quantity
C001 offer fedex 700
C001 order ubs 400
C001 shipped ubs 100
C003 offer fedex 730
C003 order fedex 620
C003 shipped dhl 530
C005 offer fedex 900
C005 shipped ubs 475
In the above table I have different campaigns
, their process_status
and delivery_type
.
Now, I want to extract all campaigns
which switch their delivery_type
between different process_status
.
Therefore, I am looking for a query that does something like this:
SELECT
campaign,
process_status,
delivery_type,
quantity
FROM logistics
WHERE delivery_type differes in different process_status
I have no clue how the WHERE
condition must look to achieve the expected result.
Do you have any idea?
Advertisement
Answer
You can try the below query.
SELECT
campaign, process_status, delivery_type, sum(quantity) as quantity
FROM logistics
WHERE campaign IN (
SELECT
campaign
FROM logistics
GROUP BY campaign
HAVING max(delivery_type)!=min(delivery_type)
)
GROUP BY campaign, process_status, delivery_type