Выберите значения, которые существуют до и после определенного периода времени - 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 B", "2018-01-03");

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

SELECT Customer
FROM ORDERS
WHERE Order_Date >= "2019-02-01 00:00:00"
AND Order_Date < "2019-03-01 00:00:00"

Пока все это прекрасно работает.


Однако теперь яхотите, чтобы в списке были указаны только те клиенты, которые

а) разместили заказ в феврале и

WHERE order in >= "2019-02-01 00:00:00" AND < "2018-03-01 00:00:00"


b) не не разместили заказ за 12 месяцев до и

WHERE no order < "2019-02-01 00:00:00" AND >= "2018-01-02 00:00:00"


c) разместили заказ до этого12-месячный период

WHERE order in < "2018-01-02 00:00:00"


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

1 Ответ

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

Это немного сложно, но вы можете использовать group by и having:

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 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...