На самом деле есть два подзапроса.Первый для " Для каждого customer_id, который сделал заказ 1 января 2006 года ", а второй для " их исторические (до 1 января 2006 года) даты первого и последнего заказа "
Итак, во-первых:
select customer_id from A where order_date = '2006-01-01';
и во-вторых:
select customer_id, min(order_date) as first_date, max(order_date) as last_date
from A
where order_date < '2006-01-01' group by customer_id;
Наконец, вам нужно получить только тех клиентов из второго подзапроса, которые существуют в первом:
select customer_id, min(order_date) as first_date, max(order_date) as last_date
from A as t1
where
order_date < '2006-01-01' and
customer_id in (
select customer_id from A where order_date = '2006-01-01')
group by customer_id;
или, может быть более эффективным:
select customer_id, min(order_date) as first_date, max(order_date) as last_date
from A as t1
where
order_date < '2006-01-01' and
exists (
select 1 from A as t2
where t1.customer_id = t2.customer_id and t2.order_date = '2006-01-01')
group by customer_id;