我正在尝试准备工作报告,我需要查看客户是否已取消并重新提交订单。没有任何方法可以链接两个订单,我必须继续的是customer_id,order_date和状态。我需要找到特定日期范围内的所有客户,这些客户在同一天放置了多个订单记录,返回customer_id就够了
order_id customer_id order_date status
1 1234 30/12/2013 09:10:55 CANCELLED
2 2222 30/12/2013 09:17:12 APPROVED
3 4321 30/12/2013 10:04:10 APPROVED
4 1234 30/12/2013 10:22:01 APPROVED
在上面的示例数据中,它会找到订单1和4并返回customer_id 1234.状态是什么并不重要,因为我可以从报告中选择那些。
我已经做了一些挖掘并想出了类似的东西:
SELECT customer_id,
(SELECT COUNT(*) AS count
FROM orders AS o2
WHERE (order_date = o1.order_date)) AS counter
FROM orders AS o1
WHERE (order_date BETWEEN '2013-12-01' AND '2014-01-01')
GROUP BY customer_id, order_date
HAVING (counter >= 2)
但是在尝试运行时遇到错误,所以我显然在某处出现了一些错误。
任何帮助都将不胜感激。
答案 0 :(得分:5)
子查询有点偏,但您可以完全跳过子查询,只需按customer_id
分组,order_date
的日期部分并计算每天的结果;
SELECT DISTINCT customer_id
FROM orders
WHERE order_date >= '2013-12-01' AND order_date < '2014-01-02'
GROUP BY customer_id, CAST(order_date AS DATE)
HAVING COUNT(*) >= 2
请注意,由于您的日期附加了任意时间,因此如果不在where子句中转换为BETWEEN
,则无法轻松使用DATE
。直接比较日期更容易(上限小于覆盖前一天的所有时间)