用SQL怎么求最大连续逾期
时间: 2024-09-26 10:01:14 浏览: 93
在SQL中,要计算最大连续逾期天数,通常需要涉及窗口函数和自连接。假设我们有一个名为`loan_table`的表,其中包含`loan_id`, `start_date`, `end_date`, 和 `status`字段,`status`表示贷款状态(如"逾期"或"正常")。我们可以使用下面的查询来找出每个贷款的最大连续逾期天数:
```sql
WITH (
loan_status AS (
SELECT
loan_id,
start_date,
end_date,
status,
ROW_NUMBER() OVER(PARTITION BY loan_id ORDER BY start_date) as row_num,
LAG(status, 1) OVER (PARTITION BY loan_id ORDER BY start_date) as prev_status
FROM loan_table
)
)
SELECT
loan_id,
MAX(ABS(DATEDIFF(end_date, COALESCE(prev_status_date, start_date)))) as max_continuous_overdue_days
FROM (
SELECT
loan_id,
start_date,
end_date,
CASE WHEN status = '逾期' THEN start_date ELSE NULL END as prev_status_date
FROM loan_status
WHERE status = '逾期'
)
GROUP BY loan_id
```
这个查询首先创建了一个窗口函数(ROW_NUMBER()),按照贷款ID对记录进行排序,并跟踪每条记录的状态。然后,它计算了每笔逾期贷款与其前一条状态之间的日期差,如果前一条状态也是逾期,则加上当前逾期天数;如果不是逾期,则从上一笔逾期开始计数。最后,通过`MAX()`函数找到每个贷款的最大连续逾期天数。
注意,这里假设逾期状态('逾期')的记录会被标记为非NULL,正常状态则不会。如果有多种逾期状态,可能需要根据实际情况调整`CASE`语句。
阅读全文