Подсчитать значения, которые существуют до и после определенного периода времени - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть следующая простая таблица, которую вы также можете найти в SQL Fiddle здесь :

CREATE TABLE Orders (
    Customer TEXT,
    Order_Date DATE
);

INSERT INTO Orders
(Customer, Order_Date)
VALUES 
("Customer A", "2017-05-23"),
("Customer B", "2018-09-10"),
("Customer B", "2018-12-14"),
("Customer A", "2019-01-03"),
("Customer A", "2019-02-15"),
("Customer C", "2017-09-04"),
("Customer B", "2019-01-09"),
("Customer A", "2019-02-16"),
("Customer C", "2019-02-12"),
("Customer C", "2019-02-15"),
("Customer B", "2018-01-03");

Как видно из таблицы, отображаются даты заказа от разных клиентов.
Я использую приведенный ниже SQL, чтобы получить клиентов, которые

a) placed an order in February 2019 and
b) did not place an order in the 12 month before and
c) placed an order before this 12 months period

Ссылаясь на ответ в этом вопросе здесь .

SELECT o.Customer
FROM ORDERS o
GROUP BY o.Customer
HAVING SUM( o.Order_Date >= '2019-02-01' AND o.Order_Date < '2019-03-01' ) > 0 AND
       SUM( o.Order_Date >= '2018-01-02' AND o.Order_Date < '2019-02-01' ) = 0 AND
       SUM( o.Order_Date < '2018-01-02' ) > 0 ;

Вседо сих пор это прекрасно работает.


Однако теперь я хочу добиться того, чтобы SQL отображал список клиентов, отвечающих вышеуказанным критериям, а также counts количество заказов, размещенных клиентом February 2019:

В приведенном выше примере я ожидал бы следующий результат:

Customer C     2  

Что мне нужно изменить в своем запросе, чтобы добиться этого?

1 Ответ

0 голосов
/ 25 февраля 2019

Просто добавьте это к select:

SELECT o.Customer,
       SUM( o.Order_Date >= '2019-02-01' AND o.Order_Date < '2019-03-01' ) as num_feb_orders
FROM ORDERS o
GROUP BY o.Customer
HAVING SUM( o.Order_Date >= '2019-02-01' AND o.Order_Date < '2019-03-01' ) > 0 AND
       SUM( o.Order_Date >= '2018-01-02' AND o.Order_Date < '2019-02-01' ) = 0 AND
       SUM( o.Order_Date < '2018-01-02' ) > 0 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...