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 年。
我试了好几次都没有成功。
我有一个 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 年。