按年查找递增的值

Find increasing values by year

我有一个 table,其中包含客户所欠债务的清单。我需要编写一个 SQL 查询来查找哪些客户的债务每年都在增加。基本上,我试图找到 "bad apples",每年不断增加债务的人。我想我正在寻找趋势?

我用一些示例数据创建了一个 SQL Fiddle。在示例中,我不关心 customerId 2174,因为他们在很多年前只有两次债务,但是,customerId 5218 在过去 3-4 年中的债务越来越多。

理想情况下,我想要一个显示 "trend" 债务数量增加的 customerId 列表。即他们在 2015 年有 1 个,2016 年有 5 个,2017 年有 30 个等

你可以试试这个。

; with cte as 
(SELECT customerId
      ,YEAR(debtDate) AS debtYear
      ,COUNT(*) AS debtCount
FROM dbo.Debts
   -----   apply year filter over there if want to select record for particular year range
GROUP BY YEAR(debtDate)
        ,customerId
)
, CT AS 
(
      SELECT C.* FROM CTE AS C 
      CROSS APPLY (
            SELECT * FROM CTE AS CC 
            WHERE C.customerId=CC.customerId
                AND C.debtYear>CC.debtYear 
                AND C.debtCount>=CC.debtCount
                ) AS D
)
SELECT DISTINCT customerId FROM CT  --- IF NEED JUST CUSTOMER NAME
------- OR IF NEED ALL DETAILS ADD debtYear, debtCount COLUMN