2013-01-22 197 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