最近2个月的SQL记录

时间:2016-07-26 10:13:36

标签: sql-server date records

我尝试使用此SQL查询获取当前总数,也记录最近2个月的记录,当月记录意味着总共3个月..

Select distinct 
tblRv.Owner,
(Select Count(*) as total from tblvv WHERE MasterID =tblRv.ID and Name <> '') 
as currentdata
from tblRe
inner join tblRv 
On tblRe.RID = tblRv.RID
WHERE 
tblRe.StartDate between dateadd(m, -2, getdate()) and getdate() and 
//tblRe.StartDate >= '2016-07-01 00:00:00' AND 
//tblRe.EndDate <= '2016-07-08 23:59:59' 
  and tblRe.Region = 'uk' and
tblRv.Owner='Roh' 
order by tblRv.Owner

当我执行此演示时,我就像这样

OwnerName     currentdata
Roh               1
Roh               2
Roh               3
Roh               5

当我单独检查撰写查询并检查日期2016-07-01和日期2016-07-30日期时,这会向我显示数据32016-06-01 00:00:00以及2016-06-31 23:59:59我数据12016-05-01 00:00:002016-05-31 23:59:59向我显示数据0
所以我想要这样的数据

owner july june may 
roh   3     1   0

当有当前月份即8月时,数据必须显示最后2个月,即7月6日

2 个答案:

答案 0 :(得分:0)

您可以尝试执行数据透视查询,其中要旋转的三列是数据集中的当前,上一个和上一个月。请注意,我必须重写您的查询以删除SELECT子句中的子查询,因为这使得无法对这些列进行聚合。

SELECT tblRv.Owner,
    SUM(CASE WHEN tblRe.StartDate = GETDATE() THEN t.total ELSE 0 END) AS currMonth,
    SUM(CASE WHEN tblRe.StartDate = DATEADD(m, -1, GETDATE())
             THEN t.total ELSE 0 END) AS prevMonth,
    SUM(CASE WHEN tblRe.StartDate = DATEADD(m, -2, GETDATE())
             THEN t.total ELSE 0 END) AS lastPrevMonth
FROM tblRe
INNER JOIN tblRv
    ON tblRe.RID = tblRv.RID
INNER JOIN
(
    SELECT MasterID, COUNT(*) AS total
    FROM tblvv
    GROUP BY MasterID
    WHERE Name <> ''
) AS t
    ON tblRv.ID = t.MasterID
WHERE tblRe.StartDate BETWEEN DATEADD(m, -2, GETDATE()) AND GETDATE() AND
      tblRe.Region = 'uk' AND
      tblRv.Owner = 'Roh' 
GROUP BY tblRv.Owner
ORDER BY tblRv.Owner

答案 1 :(得分:0)

Select 
         tblRv.Owner
        ,DATENAME(MONTH,tblRe.StartDate) as [Month]
        ,ISNULL(SUM(total),0)   as currentdata
from tblRe
INNER JOIN tblRv ON tblRe.RID = tblRv.RID
LEFT  JOIN (
            Select Count(*) as total ,MasterID
            from tblvv 
            WHERE Name <> ''
            GROUP BY MasterID
            ) tblvv 
ON tblvv.MasterID =tblRv.ID 
WHERE tblRe.StartDate >= DATEADD(MONTH, -2, GETDATE()) 
 AND  tblRe.EndDate   <= GETDATE()
 AND  tblRe.Region = 'uk' 
 AND  tblRv.[Owner] ='Roh' 
GROUP BY tblRv.Owner
        ,DATENAME(MONTH,tblRe.StartDate)
order by tblRv.[Owner]