存在行

时间:2016-07-07 16:01:05

标签: mysql

关注数据库示例

   id   |   date   |  customer |  ...
-----------------------------------------
1        2016-07-05      1
2        2016-07-05      2
3        2016-07-06      1
4        2016-07-07      1
5        2016-07-07      2

我想在2016-07-07选择2016-07-06的所有客户。

起初,我以为我是使用WHERE执行此操作的:

SELECT * FROM table
  WHERE EXISTS ( SELECT * FROM table WHERE date = '2016-07-07' )
  AND NOT EXISTS ( SELECT * FROM table WHERE date = '2016-07-06' )
  GROUP BY customer

但由于WHEREGROUP BY之前执行了,结果只能为空 - table位于2016-07-06的记录。

所以,使用HAVING,我该怎么做?我在查找HAVING子句中的行存在时遇到困难。类似的东西:

SELECT * FROM table
  GROUP BY customer
    HAVING exists date '2016-07-07'
    AND not exists date '2016-07-06'

2 个答案:

答案 0 :(得分:1)

customer分组,并且只接受date条目中至少有2016-07-07个条目的2016-07-06条目,<{1}}

SELECT customer 
FROM your_table
GROUP BY customer
HAVING sum(date = '2016-07-07') > 0
   AND sum(date = '2016-07-06') = 0

答案 1 :(得分:1)

SELECT customer FROM table t
  WHERE EXISTS ( SELECT * FROM table t1
                 WHERE date = '2016-07-07' AND t.customer = t1.customer)
  AND NOT EXISTS ( SELECT * FROM table t2 
                   WHERE date = '2016-07-06' AND t.customer = t2.customer)
  GROUP BY customer