如何在sql中获取最近六个月的数据

时间:2014-04-29 05:42:28

标签: asp.net sql sql-server

我正在该图表中开发一个图表,我想分别显示过去六个月的详细信息。 我想在条形图中显示细节。

但我没有得到任何解决方案。 我在SQL查询中有点弱。

直到现在我得到了上个月的数据。 但我想要过去六个月的数据。 这是我的代码。

DECLARE @StartDate DATETIME, @EndDate DATETIME
SET @StartDate = DATEADD(mm, DATEDIFF(mm,0,getdate())-1, 0)
SET @EndDate = DATEADD(mm, 1, @StartDate)

SELECT  sum(quantity)
FROM RS_Sell_Order_Master as s
left outer join RS_Sell_Order_Mapping as sm on sm.sell_order_no = s.sell_order_no 
left outer join RS_GIN_Master as GIN on gin.product_id = sm.product_id 

WHERE del_date BETWEEN @StartDate AND @EndDate

我想要过去六个月这样的o / p假设我上个月卖了10个数量&那个月有20个流行&我之前没卖过,所以o / p应该是

null
null
null
null
10
20
有点像这样的事情。

2 个答案:

答案 0 :(得分:3)

这将在6个月前准确指定一个日期 - 这似乎不是你需要回到SqlServer的{0} DATETIME的零数据的原因:

SET @StartDate = DATEADD(mm, -6, CURRENT_TIMESTAMP);

修改

假设您希望月份从每个月的第一个到每个月结束, 并假设因为你有空值但仍想显示我们需要制造缺失月份的数据(例如使用递归CTE)

DECLARE @StartDate DATETIME;
SET @StartDate = DATEADD(mm, -6, CURRENT_TIMESTAMP);

WITH cte AS
(
    SELECT 0 AS TheMonth
    UNION ALL
    SELECT TheMonth + 1
    FROM cte
    WHERE TheMonth < 5
)
SELECT sum(quantity)
FROM
    cte 
    LEFT OUTER JOIN RS_Sell_Order_Master as s
    ON del_date >= DATEADD(MM, cte.TheMonth, @StartDate) AND del_date < DATEADD(MM, cte.TheMonth + 1, @StartDate)
    -- Other Joins here
GROUP BY cte.TheMonth
ORDER BY cte.TheMonth;

SqlFiddle here

答案 1 :(得分:0)

每月的项目总数不能像

那样计算
select sum(items),left(date,6)+'01' from yourTable
group by left(date,6)

假设您的日期是112格式....并且它是varchar(8)类型..