首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算最后四个季度的销售价值

计算最后四个季度的销售价值
EN

Stack Overflow用户
提问于 2015-12-08 10:06:36
回答 2查看 1.8K关注 0票数 0

我需要计算最后4个季度的销售价值,充分利用Server的优势。例如,从2014-10-01到2015-09-30,今天计票。在过去的四个季度里,每季度都要重复这一程序。

我知道我可以提供的日期,但会不会是创造了一个表达式,显示了最后4个季度?我用DatePart(quarter(convert (datetime, @ date - 36, 163.105)))来计算季度数,但是最后的4分钟该怎么做呢?

对不起我的英语

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-08 13:19:47

下面是一些如何实现这一目标的示例:

代码语言:javascript
复制
;WITH quarters AS(SELECT DATEADD(q, DATEDIFF(q,0,DATEADD(q,0,GETDATE())), 0) AS sd, DATEADD(dd, 1, CAST (GETDATE() AS DATE)) AS ed
                  UNION ALL
                  SELECT DATEADD(q, DATEDIFF(q,0,DATEADD(q,-1,GETDATE())), 0) AS sd, DATEADD(q, DATEDIFF(q,0,DATEADD(q,0,GETDATE())), 0) AS ed
                  UNION ALL
                  SELECT DATEADD(q, DATEDIFF(q,0,DATEADD(q,-2,GETDATE())), 0) AS sd, DATEADD(q, DATEDIFF(q,0,DATEADD(q,-1,GETDATE())), 0) AS ed
                  UNION ALL
                  SELECT DATEADD(q, DATEDIFF(q,0,DATEADD(q,-3,GETDATE())), 0) AS sd, DATEADD(q, DATEDIFF(q,0,DATEADD(q,-2,GETDATE())), 0) AS ed
                  UNION ALL
                  SELECT DATEADD(q, DATEDIFF(q,0,DATEADD(q,-4,GETDATE())), 0) AS sd, DATEADD(q, DATEDIFF(q,0,DATEADD(q,-3,GETDATE())), 0) AS ed),
finalQuarters AS(SELECT TOP 4 * FROM quarters WHERE DAY(ed) = 1
                 ORDER BY ed DESC)
SELECT q.sd, 
       q.ed, 
      SUM(s.Amount) AS Amount 
FROM finalQuarters q
JOIN Sales s ON s.SaleDate >= q.sd AND s.SaleDate < q.ed
GROUP BY q.sd, q.ed

其想法是在第一个cte中得到最后5个季度,只过滤最后一个结束日期的部分等于1的部分,这是很难解释的。只需玩select * from finalQuarters--or quarters,看看它是如何工作的。

票数 1
EN

Stack Overflow用户

发布于 2015-12-08 11:14:41

试试这个:

从my_date my_table my_date >= DATEADD(qq,DATEDIFF(qq,-4,my_date))中选择SUM(sallary),DATEADD(qq,DATEDIFF(qq,0,DATEADD(qq,-4,my_date))组),0

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34153063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档