0

以下に示すように、どうすれば結果を得ることができますか。私のクエリはcurrent date、を入力パラメータとして受け入れる必要があります。

結果 :

               (Prior 7 - 12 Months)     (Prior 4 - 6 Months)      (Current - 3 Months)
Analysis       3/23/2012-09/20/2012      09/21/2012-12/19/2012      12/20/2012-3/20/2013

Total Active         2                         0                             0

生成する部分が出来上がり**Total active**以下のようになります。

;WITH x AS 
    (
        SELECT  ID,statusdate,status , row_number() over (partition by ID order by statusdate DESC )  as RN1
        FROM 
            (SELECT ID,statusdate,status,
                   rn = row_number() over (partition by ID order by statusdate ) 
            FROM tblHistory   (nolock)
             WHERE [statusdate] <=  '20120920' AND
             ID in ('2145','2146','4145''7175')
            )  AS A
     )

SELECT  Count(*)  
FROM x 
WHERE rn1 = 1 AND status IN ('Backup','Active')

データ :

    ID      StatusDate              Status  Order
    2145    2012-04-29              n/a     1
    2145    2012-08-02              Backup  2
    2145    2012-11-09              Active  3
    2145    2012-11-12              Backup  4
    2145    2012-12-13              Pending 5
    2145    2012-12-18              Sold    6
    2146    2012-10-15              Pending 1
    2146    2012-10-15              n/a     2
    2146    2012-12-19              Sold    3
    4145    2012-04-24              Active  1
    4145    2012-04-24              Active  2
    4145    2012-05-22              Pending 3
    4145    2012-09-13              Active  4
    4145    2012-09-13              Active  5
    4145    2012-12-05              Pending 6
    4145    2012-12-19              Sold    7
    7175    2012-11-08              n/a     1
    7175    2012-12-01              Backup  2
    7175    2012-12-05              Active  3
    7175    2012-12-06              Pending 4
    7175    2012-12-19              Sold    5
4

2 に答える 2

0

私は次のようなユースケースステートメントを使用します:

SELECT
    SUM(CASE WHEN DATEDIFF(month, statusdata, @current_date) BETWEEN 7 AND 12 
        THEN 1 ELSE 0 END) AS 'Prior7to12',
    SUM(CASE WHEN DATEDIFF(month, statusdata, @current_date) BETWEEN 6 AND 4 
        THEN 1 ELSE 0 END) AS 'Prior4to6',
    SUM(CASE WHEN DATEDIFF(month, statusdata, @current_date) BETWEEN 3 AND 0 
        THEN 1 ELSE 0 END) AS 'Prior0to3',
    FROM SomeTable

これにより、0〜3、4〜6、および7〜12か月に1つずつ、合計3つの列が表示されます。

于 2013-03-20T22:47:28.597 に答える
0

GROUP BY 関数を使用して、日付でグループ化します。

最後の select を次のように変更します。

SELECT  [statusdate], Count(*) 
FROM x 
WHERE
    rn1 = 1
    AND status IN ('Backup','Active')
    AND [statusdate] IN ('2012-09-20', '2012-12-19' , '2013-03-20')
GROUP BY [statusdate]

于 2013-03-20T22:27:10.647 に答える