mysql - 选择某个时间段之前和之后存在的值

标签 mysql sql

我有以下简单表格,您也可以在 SQL Fiddle 中找到它 here :

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 年 2 月下订单的所有客户:

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

到目前为止一切正常。


但是,现在我想实现只列出客户

a) 2 月 下订单

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"


我需要在查询中更改什么才能实现此目的?

最佳答案

这有点复杂,但是您可以使用group byhaving:

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 ;

关于mysql - 选择某个时间段之前和之后存在的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54872070/

相关文章:

MYSQL排序与学说

javascript - jquery中的Json过滤

java - JSF validator 中的 NPE

MySQL REGEXP 数字精确匹配不起作用

sql - 如何在mysql中有效存储连续变量

sql - sql golang执行查询时无效的内存地址或nil指针取消引用

mysql - 同一列上的多个条件

java - 无法使用 R 连接 MySQL

python - 缺少索引约束添加外键

mysql - 查询 1 个表中的记录,其中第 2 个表描述记录是否需要填写字段