2013-01-22 175 views
0

击穿任何人都可以帮助在SQL语句中,我试图写?我使用的是SSRS R1(SQL或SSRS的解决办法是罚款)SQL累计前12个月 - 每月

如何:按月份和年份

  • 为每个月份的

    • 显示计数测量分流,我想算在以前的累积12个月

    2012 jan: counts feb 2011 - jan 2012 
    2012 feb: counts mar 2011 - feb 2012 
    2012 mar: counts apr 2011 - mar 2012 
    

    我已经开始这个代码,但它是不正确,但是它给你什么,我想实现一个想法(这个问题是我要计算月和一年的日期)

    select 
        count(a.measure) count 
        ,month(a.StartDate) 
        ,year(a.StartDate) 
    from 
        a 
    where 
        a.StartDate >= DATEADD(mm,DATEDIFF(mm,0,@datepromt)-12,0) as startdateYrAgo --1st month 1 year ago 01/01/2012 
        and a.StartDate <= DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@datepromt)+1,0)) as startdateEOM --last day of month 31/01/2013 
    group by 
        month(a.StartDate) 
        ,year(a.StartDate) 
    
  • +2

    你尝试过什么?你是否已经检查过日期函数?你的问题是什么? – jcho360

    +3

    欢迎来到Stack Overflow!我建议你阅读常见问题解答以了解如何在StackOverflow中提出问题[FAQ](http://stackoverflow.com/faq#howtoask)。一个好的经验法则是:以“我需要”开头的问题不是一个好问题。 – Tchoupi

    +0

    你想看“dec 2011”吗? –

    回答

    0

    在这里你有一个查询的想法,它必须看起来像下面的东西;

    SELECT 
    periods.year 
    ,periods.month 
    ,measures.cnt 
    FROM (
        SELECT DISTINCT 
         year = YEAR(StartDate) 
        , month = MONTH(StartDate) 
        , month_running = DATEDIFF(mm, 0, StartDate) 
        FROM a 
        GROUP BY YEAR(StartDate), MONTH(StartDate), DATEDIFF(mm, 0, StartDate) 
    ) periods 
    JOIN (
        SELECT month_running = DATEDIFF(mm, 0, StartDate), cnt = COUNT(measure) 
        FROM a 
        GROUP BY DATEDIFF(mm, 0, StartDate) 
    ) measures 
    ON measures.month_running BETWEEN periods.month_running - 12 AND periods.month_running - 1 
    
    +0

    非常感谢sql的感谢。花了我一段时间才发现它每个月都会返回多行,但这是前几个月的月度数据,然后我必须将它们累计以获得累计月份总数。 – user2001784

    +0

    酷!我很高兴它帮助你 – pkmiec