我需要计算最后4个季度的销售价值,充分利用Server的优势。例如,从2014-10-01到2015-09-30,今天计票。在过去的四个季度里,每季度都要重复这一程序。
我知道我可以提供的日期,但会不会是创造了一个表达式,显示了最后4个季度?我用DatePart(quarter(convert (datetime, @ date - 36, 163.105)))来计算季度数,但是最后的4分钟该怎么做呢?
对不起我的英语
发布于 2015-12-08 13:19:47
下面是一些如何实现这一目标的示例:
;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,看看它是如何工作的。
发布于 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
https://stackoverflow.com/questions/34153063
复制相似问题