按年查找递增的值
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
我有一个 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