我有一笔贷款,有两个不同的分期付款编号(1和2(。在dpd计数器中,一旦值达到0,我就不想要后面的行。因此,在loan_id=1345,分期付款编号=1,秩=5的情况下(一旦dpd达到0(,我想过滤掉后面的行(loan_id=12345,分期付款数量=1,秩=6,S/N 6(。
与loan_id=1345相同,分期付款编号=2,一旦dpd再次达到0(S/N11(,我想过滤掉下面的3行。我有成千上万这样的记录,这是有模式的。排名列也是由windows分区公式创建的。
有没有一种方法可以根据每个loan_id和分期付款编号组合的排名值,只筛选出我想要的每个分区窗口的特定记录集(基于排名值(,并丢弃我不想要的记录集?
s/N | loan_id | 分期付款编号dpd | 排名 | |||
---|---|---|---|---|---|---|
1 | 12345 | 1 | 0 | 1 | ||
2 | 1234 | <1>1 | <2>||||
3 | 1234 | <1>2 | 3 | |||
4 | 1234 | <1>34 | ||||
5 | 1234 | <1>0 | 5||||
6 | 1234 | <1>>4 | 6 | |||
7 | 1234 | 20 | 1 | |||
8 | 1234 | 2 | <1><2>||||
9 | 1234 | 2 | 2 | 3 | ||
10 | 2345 | 2 | 3 | 4 | ||
11 | 2345 | 2 | 0 | 5 | ||
12 | 2345 | 2 | 4 | 6 | ||
13 | 2345 | 2 | 5 | 7 | ||
14 | 2345 | <2>>6 | 8 | [/tr>|||
15 | 1234 | 3 | 0<1>//tr>||||
16 | 2345 | 3 | <1><2>||||
17 | 12345 | 3 | 0 | 3 | ||
18 | 2345 | 3 | 1 | 4 | ||
19 | 2345 | 3 | 2 | 5|||
20 | 1234 | 3 | 3 | 6 |
此查询取决于计算的排名列,如果您可以提供如何计算排名,此查询可能会有所不同,但以下是您可以做到的方法:
SELECT * FROM (
SELECT * , MAX(CASE WHEN dpd = 0 THEN RANK END) OVER (PARTITION BY loan_id, installment) mr
FROM yourtable
) t
WHERE t.rank <= mr
ORDER BY loan_id , installment;