2014-06-10 40 views
0

我想从查询中获取前6个月的数据。如何在SQL中只获取特定月份的数据

即我必须只分组前六个月。

假设当前月份是六月话,我只希望一月份的数据&也是我不希望所有其他的前一个月比

谁能帮助我这个

SELECT 
    so_date 
FROM 
    RS_Sells_Invoice_Info_Master SIIM 
LEFT OUTER JOIN 
    RS_Sell_Order_Master AS SM ON SM.sell_order_no = SIIM.sell_order_no 
LEFT OUTER JOIN 
    RS_Sell_Order_Mapping AS SOM ON SOM.sell_order_no = SIIM.sell_order_no AND SIIM.product_id = SOM.product_id 
LEFT OUTER JOIN 
    RS_Inventory_Master AS IM ON IM.product_id = SIIM.product_id 
where 
    so_date between CAST(DATEADD(month, DATEDIFF(month, 0, so_date)-5, 0)AS DATE) and CAST(DATEADD(month, DATEDIFF(month, 0, so_date)-4, 0)AS DATE) 
+1

“过去六个月”比较是不一样的“只希望一月份的数据”。你想要什么 - 从1月份开始的所有数据,** 1月份(仅1月份)的所有数据**,或者可能有多个解释的“前6个月”(当前日历月和前5个月,前6个日历月到当前日期,今天减去6个月到其他日期)。 – alroc

+1

重复,至少[这个问题](http://stackoverflow.com/questions/1424999/get-the-records-of-last-month-in-sql-server),虽然没有任何现有的答案是理想的(现在添加更好的答案)。 –

回答

0

要获取特定月份(6个月前)的所有数据,请使用以下where条款, 您需要比较月份和年份,以确保获得正确的月份,即如果当前月份是月份,从去年开始。

where 
      datepart(Month, [so_date]) = datepart(Month, dateadd(month, -6,getdate())) 
     and 
      datepart(Year, [so_date]) = datepart(year, dateadd(month, -6,getdate())) 
+1

此解决方案无法使用索引,并且在大型表上会不必要地变慢。 – Tomalak

+0

对不起,我没有你 –

1

假设电流月份是六月话,我只希望一月份的数据

这会工作

WHERE 
    so_date >= DATEADD(mm, -6, LEFT(CONVERT(VARCHAR, GETDATE(), 120), 8) + '01') 
    AND 
    so_date < DATEADD(mm, -5, LEFT(CONVERT(VARCHAR, GETDATE(), 120), 8) + '01') 

LEFT(CONVERT(VARCHAR, GETDATE(), 120), 8) + '01'为您提供YYYY-MM-DD格式的当前月份的开始。其余的都很简单。

+0

nope dud这不起作用 –

+0

第一:我不认为我们足够接近你给我打电话“伙计”。第二:*“这是行不通的”*只是一个错误描述。 – Tomalak

+0

好的,先生,谢谢你的宝贵时间,我得到了解决方案 –

0

请检查的例子,你用使用DateAdd功能减去6个月与之间功能

Declare @t table (name varchar(50), createddate datetime) 

Insert into @t values('ajay', GETDATE()-50),('ajay1', '2014-03-10'),('ajay2', '2013-12-09'),('ajay3', '2013-11-10') 
declare @currentdate datetime = getdate() , @sixmontholddate datetime = dateadd(MONTH, -6,getdate()) 

select @currentdate , @sixmontholddate 

select * from @t 

select * from @t where createddate between dateadd(MONTH, -6,getdate()) and GETDATE() 
+0

这是[SQL Server](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have- in-common.aspx),让我们不要。哎呀,你不应该试图在任何服务器上使用连续范围类型。 –

相关问题