过去12个月中没有活动的最大月数

时间:2017-09-28 15:45:30

标签: sql-server tsql

我有一个包含以下项目的数据集:

  1. 月 - YR
  2. 帐户Nbr
  3. 收入总额
  4. 如果某个帐户在某个月没有收入总额,则该帐户/月没有记录。

    我想知道每个帐户 - 该帐户没有收入的连续月份的最大数量是多少?

    例如,如果帐户123在过去12个月中每个月都有收入,则其计数将为0.

    如果帐户987连续4个月有收入,那么连续5个月没有收入,其余月份的收入则为5。

    如果帐户657每隔一个月有一次活动,那么他们的计数将是1,b / c 1是没有活动的连续月份的最大数量。

    提前致谢

    示例数据

    **Accnt**  |**Month-Yr**   |**Revenue**
    123        |8/1/2016       |1000
    123        |9/1/2016       |1500
    123        |10/1/2016      |500
    123        |11/1/2016      |100
    123        |12/1/2016      |250
    123        |1/1/2017       |750
    123        |2/1/2017       |900
    123        |3/1/2017       |700
    123        |4/1/2017       |1200
    123        |5/1/2017       |250
    123        |6/1/2017       |750
    123        |7/1/2017       |900
    123        |8/1/2017       |700
    123        |9/1/2017       |1200
    987        |8/1/2016       |100
    987        |9/1/2016       |250
    987        |10/1/2016      |750
    987        |11/1/2016      |900
    987        |5/1/2017       |700
    987        |6/1/2017       |1300
    987        |7/1/2017       |250
    987        |8/1/2017       |750
    987        |9/1/2017       |900
    657        |8/1/2016       |700
    657        |10/1/2016      |1200
    657        |12/1/2016      |100
    657        |2/1/2017       |250
    657        |4/1/2017       |750
    657        |6/1/2017       |900
    657        |8/1/2017       |700
    
    Accnt 123 would be 0 months
    Accnt 987 would be 5 months
    Accnt 657 would be 1 month
    

1 个答案:

答案 0 :(得分:0)

这个怎么样? (因为您发布了最少的信息,我保留在我解释时创建自己的DDL的权利。)

    IF OBJECT_ID ('tempdb..#') IS NOT NULL
        DROP TABLE #sales
    GO 
    CREATE TABLE #sales
        (Dte datetime
        ,amt int
        ,id int
        ,rownum int identity PRIMARY KEY
        )   

    INSERT INTO #sales
    SELECT '9/1/17',1200, 987
    INSERT INTO #sales
    SELECT '10/1/17',1100, 987
    INSERT INTO #sales
    SELECT '11/1/17',1000, 987
    INSERT INTO #sales
    SELECT '5/1/18',1900, 987
    INSERT INTO #sales
    SELECT '6/1/18',120, 987

    INSERT INTO #sales
    SELECT '4/1/17',100, 657
    INSERT INTO #sales
    SELECT '5/1/17',190, 657
    INSERT INTO #sales
    SELECT '7/1/17',12, 657

    GO

    SELECT MAX(DATEDIFF(dd,a.dte,b.dte)), a.id
    FROM #sales a
    INNER JOIN #sales b
        ON a.rownum = b.rownum-1
        AND a.id =b.id
    GROUP BY a.id