最近,在開展扶貧金融貸款審計工作中,筆者巧用T-SQL開窗函數,解決了從扶貧金融貸款流水數據中查找出所有同一貸款人多筆貸款期限起止日期有重疊這一難題。
根據《湖北省扶貧小額信貸貼息項目管理辦法》(鄂政扶發[2014]22號)“對符合貸款條件的建檔立卡戶5萬元以下的貸款提供貼息補助”,審計需要篩選出某一時點貸款余額大于5萬元的貸款流水。由于同一建檔立卡貧困戶可能涉及多筆貸款,每筆貸款的起止日期不同,需要找出單筆貸款大于5萬元或同一貸款期間的多筆貸款金額大于5萬元的記錄。如圖1。

圖1
對于貸款期間沒有重疊的,某一時點的貸款余額就是該筆貸款的金額,只需要加條件語句就可以查詢出來。但對于貸款期間有重疊的,在日期重疊期間的貸款余額則為多筆貸款金額匯總。
如何找出有貸款日期重疊的記錄呢?首先對每個貸款人的貸款信息按借款日進行升序排序,然后用下一條記錄的借款日與上一條記錄的到期日進行比較,如果下一條記錄的借款日早于上一次記錄的到期日,說明日期有重疊。
通常一條查詢語句只會有一個窗口,只返回一個值。而開窗函數就是把滿足條件的數據分成幾部分,每一部分數據可以通過像現實中的“窗口”對行集組進行聚合計算,每組可以返回多個值。
開窗函數格式:row_number()over(partition by分組列order by排序列desc)
row_number()從1開始,為每一條分組記錄返回一個數字?!?br>