【问题标题】:Do not include results of customers who havent made a recent order?不包括最近未下订单的客户的结果?
【发布时间】:2018-10-10 14:25:47
【问题描述】:

确定每个客户下了多少订单。不要在结果中包含最近未下过订单的任何客户。

order#  customer# orderdate
============================
1000    1005    31-MAR-09 
1001    1010    31-MAR-09
1002    1011    31-MAR-09
1003    1001    01-APR-09
1004    1020    01-APR-09
1005    1018    01-APR-09
1006    1003    01-APR-09
1007    1007    02-APR-09
1008    1004    02-APR-09
1009    1005    03-APR-09
1010    1019    03-APR-09
1011    1010    03-APR-09
1012    1017    03-APR-09
1013    1014    03-APR-09
1014    1007    04-APR-09
1015    1020    04-APR-09
1016    1003    04-APR-09
1017    1015    04-APR-09
1018    1001    05-APR-09
1019    1018    05-APR-09
1020    1008    05-APR-09

下面是我在 Oracle 中的 SQL 查询

select count(orderdate)    
from books     
group by customer#

至于结果,我得到了总数 每个客户订购的书籍。但是它也指出我需要 仅包括最近的订单。

【问题讨论】:

  • 您需要定义最近,也就是说上周?最后一个月?昨天?最后一个季度?
  • 您可以选择代码然后按 ctrl + K 将代码格式化为代码
  • 您好,是课程的吗?也许你应该自己尝试一下。
  • 使用having 子句,例如having max(orderdate) >= date '2009-04-04' 仅显示最近 订购商品的客户的结果。
  • Google SQL Where 子句,您可以找到您要查找的内容。就像@nacho 说的那样,您需要定义“最近”的含义并将其用作子句的一部分。

标签: sql oracle


【解决方案1】:

聚合时,您通常会包含 group by 键。

您的问题是关于过滤的。如果您想统计所有个订单,但只针对最近下过订单的客户,那么过滤是在聚合之后。使用having 子句:

select customer#, count(*)    
from books     
group by customer#
having max(orderdate) >= date '2009-04-01';  -- or whatever the cutoff is for "recent"

如果您只想统计 最近 个订单,那么您需要过滤 before 聚合。所以你使用where 子句:

select customer#, count(*)    
from books
where orderdate >= date '2009-04-01'
group by customer#;

每种情况下的计数都不同。还要注意 date 关键字的使用,这样您就可以将日期常量表示为 YYYY-MM-DD。

【讨论】:

  • 是的,我想这就是我要找的。问题很模糊。谢谢
【解决方案2】:

我认为你只需要添加一个 where(date>02-APR-09) 这样你就只会得到日期大于指定日期的订单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多