【问题标题】:Max Nbr of Months W/ No Activity in Past 12 Months过去 12 个月内有/无活动的最大月数
【发布时间】:2017-09-28 15:45:30
【问题描述】:

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

  1. 月-年
  2. 帐号号
  3. 总收入

如果某个帐户没有给定月份的总收入,则该帐户/月没有记录。

我想知道每个帐户 - 该帐户最多连续几个月没有收入?

例如,如果帐户 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

【问题讨论】:

  • 我认为如果您包含一些示例数据和预期结果,您会得到更多答案
  • 而您编写的代码/查询不起作用。

标签: sql-server tsql


【解决方案1】:

这个怎么样? (因为您发布的信息很少,我保留创建自己的 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 2010-10-11
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2020-04-02
    相关资源
    最近更新 更多