SELECT c.customer_name, o.item_name, MIN(o.order_date) AS first_order_date, MAX(o.order_date) AS last_order_date
FROM customers c
JOIN orders o ON c.customer_id = o.customer_id
WHERE o.item_name IN
(SELECT item_name FROM orders GROUP BY item_name HAVING COUNT(DISTINCT customer_id) > 1)
GROUP BY c.customer_id, o.item_name
HAVING COUNT(*) > 1;
这个查询语句会首先从customers表和orders表中加入客户和订单信息。然后使用子查询筛选掉只订购了一个以上同一物品的客户。紧接着通过GROUP BY子句按照客户ID和商品名称分组,COUNT(*)用于计算出每个组中的订单数量。最后,使用HAVING筛选出所有订单数量大于1的客户,这意味着他们订购了一个以上同样的商品。MIN和MAX函数用于获取第一次和最后一次的订单日期。