【问题标题】:Find customer who placed order every month and who did not place order every month查找每月下单和每月未下单的客户
【发布时间】:2020-04-23 23:17:57
【问题描述】:

我正在寻找一个不能列出客户的查询

  1. 谁每月从下表中下订单?答:123

  2. 谁不是每个月都下订单的? A:除 123 以外的所有人

我不精通此类代码,我尝试构建子查询和 cte,但我无法构建我的逻辑。我尝试了以下但无法取得进展。

; with cte as(
SELECT customer_id,DATEPART(MONTH,Customer) as month,count(units) as no_of_order
from dwqc.dbo.orders
group by customer_id,DATEPART(MONTH,Customer))
select * from cte 

有人可以帮我解决这个问题吗?谢谢!

【问题讨论】:

  • 把你的问题分解成小块。第 1 步 - 定义(用文字)“每个月”的实际含义。您的样本跨越去年的 3 个月。很简单,除非您限制时间范围,否则没有客户每个月都有订单。一旦有了时间范围(开始日期、结束日期),您就知道总月数了。
  • 您统计的是每个月下订单的人数。所以你需要计算不同的月份。所以你应该在末尾添加HAVING COUNT(DISTINCT DATEPART(MONTH,Customer))=3

标签: sql-server


【解决方案1】:
SELECT customer_id 
from dwqc.dbo.orders
group by customer_id 
having count(distinct DATEPART(MONTH,Customer))
     = (select count(distinct DATEPART(MONTH,Customer)) from dwqc.dbo.orders)

感谢@Nick.McDermaid

【讨论】:

    猜你喜欢
    • 2021-01-27
    • 2021-03-20
    • 1970-01-01
    • 2023-01-24
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 2022-07-11
    • 1970-01-01
    相关资源
    最近更新 更多