当我们在一月份在SQL Server中时,如何获得上个季度和上个月的销售额?



例如,我们有2017年,2018年和2019年的数据。如果我在2019年1月,我想要上一季度和上个月的数据。

我的查询是这样的:

Select 
(case
When month(datecolumn) = month(getdate()) - 1 
then sales 
else 0 
end) as premonthsales,
(case 
when datepart(qq, datecolumn) = datepart(qq, getdate()) - 1 
then sales 
else 0 
end) as lq sales 
from 
t

当我在2019年1月时,它向我显示了2017年12月和2018年的数据。我希望它像我在 2018 年 1 月一样动态,它应该只显示上个月和最后一个季度(2017 年第 4 季度(的 2017 年 12 月数据。

如果您刚刚结束上一季度,只需使用基本的日期逻辑即可。但是,这是伪 SQL:

SELECT ...
FROM ...
WHERE DateColumn >= DATEADD(QUARTER(DATEDIFF(QUARTER,0,GETDATE())-1,0)
AND DateColumn < DATEADD(QUARTER(DATEDIFF(QUARTER,0,GETDATE()),0);

对于 19 年 1 月,18 年 12 月已经在上一季度,因此您不需要额外的逻辑。

若要在 SQL Server 中获取上一季度的第一天,请使用以下代码:

SELECT DATEADD(qq, DATEDIFF(qq, 0, GETDATE()) - 1, 0)

要获取上一季度的最后一天,请执行以下操作:

SELECT DATEADD(dd, -1, DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0))

要获取当前季度的第一天,请执行以下操作:

SELECT DATEADD(qq, DATEDIFF(qq, 0, GETDATE()), 0)

您可以获得所有日期,根据获得的日期对数据应用过滤器以获得正确的结果。

SELECT ...
FROM ...
WHERE DateColumn between start_date and end_date;

你也应该包括YEAR

SELECT 
(CASE WHEN MONTH(datecolumn) = MONTH (GETDATE()) - 1 AND  YEAR(datecolumn) = YEAR(GETDATE()) - 1 THEN sales ELSE 0 END) AS premonthsales ,
(CASE WHEN DATEPART(qq,datecolumn) = DATEPART(qq,GETDATE()) - 1 AND AND  YEAR(datecolumn) = YEAR(GETDATE()) - 1 THEN Sales ELSE 0 END) AS lq sales 
FROM t

最新更新