MySQL - 连接所有子记录都有值的记录

时间:2014-10-31 16:56:30

标签: mysql sql join

第1部分

假设我有一个订单表,每个订单都有一个或多个分期付款。

分期付款

id  |  order_id  |  customer_id  |  timestamp
-------------------------------------------------------
1   |      1     |       5       |  2014-10-31 00:00:00
2   |      1     |       5       |  NULL
3   |      1     |       5       |  2014-10-31 00:00:00
4   |      2     |       8       |  2014-10-31 00:00:00
5   |      2     |       8       |  2014-10-31 00:00:00
6   |      2     |       8       |  2014-10-31 00:00:00
7   |      3     |       5       |  2014-10-31 00:00:00

我想检索所有分期付款都有时间戳的所有订单,这些时间戳中最大的一个是在过去的X天内。

在上表中,我应检索订单ID 2和3,但不应检索1,因为其中一个分期付款具有NULL时间戳。

我能做到这一点的最有效方法是什么?我真的不知道从哪里开始,但我想我需要某种子查询来处理数据。

第2部分

最终,我在这里要做的是计算每个客户在第1部分中通过测试的订单数量(只有所有分期付款都有时间戳的订单),我会将其与其他值进行比较。

因此,一旦我的结果集中包含所有分期付款都有时间戳的所有订单,我该如何对这些订单进行分组以包括每个符合条件的客户的计数?

2 个答案:

答案 0 :(得分:2)

select order_id
from order
group by order_id
having sum(timestamp is null) = 0

问题的第二部分:

select customer_id, count(distinct order_id) as unique_orders
from order
where timestamp is not null
group by customer_id

答案 1 :(得分:0)

试试这个:

SELECT count(*), customer_id
FROM order
WHERE timestamp is not null
GROUP BY customer_id