第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部分中通过测试的订单数量(只有所有分期付款都有时间戳的订单),我会将其与其他值进行比较。
因此,一旦我的结果集中包含所有分期付款都有时间戳的所有订单,我该如何对这些订单进行分组以包括每个符合条件的客户的计数?
答案 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