如何查询仅在单行上不匹配的多个条件

ckg61386

我在这里提供了当前正在使用的表的简化示例:http : //sqlfiddle.com/#!17/c57e33/1

CREATE TABLE orders
    (id SERIAL PRIMARY KEY,
     customer_id INT, 
     created_at DATE)
;

INSERT INTO orders
    (customer_id, created_at)
VALUES
    (1, '2019-10-09'),
    (1, '2019-10-01'),
    (1, '2019-08-09'),
    (2, '2019-10-09'),
    (2, '2019-10-09'),
    (3, '2019-09-09'),
    (3, '2019-08-09'),
    (4, '2019-08-09'),
    (4, '2019-08-09'),
    (5, '2019-10-09'),
    (5, '2019-10-09'),
    (5, '2019-08-09')
;

我的问题是我只想退回在两个特定日期有一个或多个订单的客户,而在这两个日期之间没有订单。在小提琴中,只有customer_id 5应该匹配。

在尝试了多种不同的查询方式之后,我终于找到了一种使用一堆EXISTS子句的工作方式:

SELECT DISTINCT(customer_id) 
FROM orders o1
WHERE EXISTS (SELECT 1 FROM orders o2 WHERE o1.customer_id = o2.customer_id AND o2.created_at = '2019-10-09')
AND EXISTS (SELECT 1 FROM orders o2 WHERE o1.customer_id = o2.customer_id AND o2.created_at = '2019-08-09')
AND NOT EXISTS (SELECT 1 FROM orders o2 WHERE o1.customer_id = o2.customer_id AND o2.created_at BETWEEN '2019-08-10' AND '2019-10-08')

但是我想知道是否有更简单,更有效的方法来做到这一点。

萨尔曼A

您可以使用条件聚合:

SELECT customer_id
FROM orders
WHERE created_at BETWEEN '2019-08-09' AND '2019-10-09'
GROUP BY customer_id
HAVING MIN(created_at) = '2019-08-09'
AND    MAX(created_at) = '2019-10-09'
AND    COUNT(DISTINCT created_at) = 2

HAVING子句将过滤条件匹配的组。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

XSLT 不匹配多个条件

如何在JOIN查询中匹配多个条件

Excel:在多个条件上匹配

jq过滤输出不匹配多个条件

访问 - 创建查询以匹配多个条件

如何仅在某些行上获得多个Java正则表达式匹配

条件评估在空行上键入不匹配

匹配多个条件的代码无法处理不匹配/中断

如何在单行上匹配正则表达式?

使用150多个参数和数据不匹配访问INSERT查询。如何找到错误的参数?

Swift:如何仅在匹配条件时以不固定的时间间隔向字符串添加分隔符?

AWS DynamoDB DocumentClient 查询错误 - 一个或多个参数值无效:条件参数类型与架构类型不匹配

SQLite查询仅在多行或同一ID上匹配

单行查询返回多个行

根据多个条件选择单行

sed 或 Perl 单行 + 如何仅在完全匹配时替换文件中的路径

如何在一个查询中的多个子查询上正确使用多个group_concats而不区分?

SQL:如何根据与具有首选匹配顺序的多个可能值匹配的列来选择单行?

如何在特定 id 上不设置条件,不要在 DSL 查询中搜索

多个UNION SQL Jet查询中的数据不匹配错误

如何匹配多个条件并获取消息

在R中如何与多个条件匹配?

使用多个条件和是/否与 Dlookup 不匹配

如果模式的首次出现与条件不匹配,如何使匹配失败?

Mysql查询,多个where条件,哪个字段匹配?

IoT中心路由查询在邮件正文上不匹配

VBA中SQL查询上的数据类型不匹配

如何查询多个条件的通过2

如何遍历多个表并仅在条件满足时才保留?