【发布时间】:2017-03-20 15:45:07
【问题描述】:
我有一张这样的桌子:
Client Branch Amount Date
1 2 1500 1.1.14
1 2 1400 3.1.14
1 3 1500 1.1.14
1 4 300 7.1.14
1 5 1500 1.1.14
------------------------------
2 2 300 1.1.14
2 2 300 1.1.14
2 5 300 1.1.14
2 3 400 4.1.14
------------------------------
3 2 300 1.1.14
3 2 300 1.1.14
3 5 300 1.1.14
3 5 300 1.1.14
3 3 400 4.1.14
4 2 300 1.1.14
4 2 300 1.1.14
4 5 300 1.1.14
4 5 300 1.1.14
4 5 300 1.1.14
我想要的输出应该是这样的:
Client Branch Amount Date Ind Loan_Distinct_Num
1 2 1500 1.1.14 0 1
1 2 1400 3.1.14 0 2
1 3 1500 1.1.14 1 1
1 4 300 7.1.14 0 3
1 5 1500 1.1.14 1 1
-------------------------------------------------
2 2 300 1.1.14 0 1
2 2 300 1.1.14 0 2
2 5 300 1.1.14 1 2
2 3 400 4.1.14 0 3
--------------------------------------------------
3 2 300 1.1.14 0 1
3 2 300 1.1.14 0 2
3 5 300 1.1.14 1 1
3 5 300 1.1.14 1 2
3 3 400 4.1.14 0 3
------------------------------------------------
4 2 300 1.1.14 0 1
4 2 300 1.1.14 0 2
4 5 300 1.1.14 1 1
4 5 300 1.1.14 1 2
4 5 300 1.1.14 0 3
那我想做什么? (注释:那些记录只是一个样本数据)
嗯,这些是规则: 客户从同一家银行的一个分行搬到另一个分行。问题是分支机构多次为他写入数据。我想确定重复的贷款。需要两个步骤:
第 1 步: 假设:Same_Amount + Same_Date + Diffrent Date ---> Ind = 1 在在第一个 raw 之后的记录上。
Ind 字段如何工作?
例如: 在客户端 = 1 的分区中,数量 1500 对相同日期和不同分支重复 3 次,但只有最后两个此详细信息的记录将为 Ind 获得“1”值,第一个将获得 Ind = 0,因为它不是重复贷款,数据中首次出现该金额和日期的记录。
如果像 client = 2 一样,branch = 2 有两条记录,branch = 5 只有一条记录,所以在这种情况下,我将假设 branch = 2 的最后一条记录正在重复。
如果客户 = 3,分支 = 2 中有两条记录,分支 = 5 有两条记录,所以在这种情况下,我将假设来自分支 2 的两笔贷款都重复了。
如果客户 = 4,那么它将与客户 3 相同,但还有另一条记录,但我会认为它是新记录,因为我没有多余的过去贷款可以与她交流。
第 2 步:我想为每个客户创建自己的不同贷款编号
对如何接近解决这个不简单的问题有任何帮助吗?
评论:sql-server 2008.
【问题讨论】:
-
Row_Number 适用于 client = 1 的情况。那么客户端 = 2,3,4 呢?
-
这些记录是否按创建时间顺序排列?对于客户端 1,你怎么知道 1 / 2 / 1500 / 1.1.14 发生在 1 / 3 / 1500 / 1.1.14 或 1 / 5 / 1500 / 1.1.14 之前?
-
是的。假设数据排序正确。
标签: sql sql-server case rank