sql server—连续多年出现的sql查询数据

ffdz8vbo  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(374)

我试过好几次想弄明白这个问题,但都没有成功。
我正试图查询一个表。
invno(主键)、custid、invamt、datepd
我想把所有连续三个会计年度至少支付过一张发票的客户都拉过来。本例的会计年度为次年8月1日至7月31日。invno是唯一的,但是custid可以出现多次,这取决于他们支付了多少发票。有人能帮我吗?
对于输出,我需要每个custid一个记录,以及custid连续多少年支付了一张发票。
客户号333连续7年

rmbxnbpk

rmbxnbpk1#

你可以通过减去8个月或者加上4个月来提取年份。那么, 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年前的话,那就是3年了。

相关问题