【问题标题】:Query / Subquery with multiple date ranges具有多个日期范围的查询/子查询
【发布时间】:2017-10-22 10:10:29
【问题描述】:

我正在尝试找到一种使用子查询检索数据的方法,其中 customerid 返回每周绩效以及年度绩效结果。使用以下语句时,结果是总销售额,而不是按客户 ID(在每一行中)的销售额。

Select CUSTOMERID, 
  SUM(Amount_Sales), 
  (Select SUM(Amount_Sales), 
   From SalesTable 
   Where SaleDate>='01/01/2017' 
     and SaleDate<='12/31/2017')
From SalesTable
Where SaleDate>='05/22/17' and SaleDate<='05/28/17'
GROUP BY CUSTOMERID

【问题讨论】:

  • 您必须为 CUSTOMERID 使用 group by
  • @Blasanka 感谢您的提醒
  • 以后在发帖时请牢记以下几点: 1) 包括您看到的输出示例以及您想要的输出。 2) 请将问题标记到特定的数据库引擎。 3)当您从其他人的评论中弄不清楚问题时,将答案添加到您的问题中。
  • 不确定你的第三个建议是什么意思@spfursich。前两项已适当注明。

标签: sql sql-server-2008 select


【解决方案1】:

您可以使用条件聚合在单个聚合中执行此操作:

select customerid,
    sum(amount_sales) as annual_sales,
    sum(case when saledate >= '2017-05-22'
                and saledate <= '2017-04-28' 
        then amount_sales else 0 end) as weekly_sales
from salestable
where saledate >= '2017-01-01'
    and saledate <= '2017-12-31'
group by customerid;

【讨论】:

  • where 子句日期更改为全年,而不是每周日期。这是设计使然吗?性能相关?
  • @BIGTONE559 - 我切换了日期过滤器的位置。由于每周过滤的行是全年的子集,因此您可以每年汇总并有条件地每周汇总。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-19
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
相关资源
最近更新 更多