SQL查询连续年份出现的数据

SQL query data that appears for consecutive years

我试了好几次都没有成功。

我有一个 table 正在尝试查询。

InvNo(主键), 客户编号, 投资额, 日期PD

我想拉出所有连续 3 个会计年度至少支付过一张发票的客户。此示例的财政年度是次年的 8 月 1 日至 7 月 31 日。 Thie InvNo 是唯一的,但 custID 可以多次出现,具体取决于他们支付了多少发票。谁能帮我解决这个问题?

对于输出,我需要每个 custID 的一条记录以及 CustID 连续支付发票的年数。

CustID 333 连续 7 年

您可以通过减去 8 个月或加上四个月并提取年份来获得年份。那么,lag()可以解决问题:

select distinct custid
from (select t.*, lag(yyyy, 2) over (partition by custid order by yyyy) as prev_yyyy_2
      from (select distinct custid, year(dateadd(month, -8, datepd)) as yyyy
            from t
           ) t
     ) t
where prev_yyyy_2 = yyyy - 2;

最里面的子查询只获取成对的客户和年份。 lag() 看起来落后两行。如果“2 rows behind”恰好是 2 年前,则存在 3 年。