| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 547 人关注过本帖
标题:关于多重条件判断的请教
取消只看楼主 加入收藏
sharpex1
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2021-12-12
结帖率:76.92%
收藏
已结贴  问题点数:4 回复次数:9 
关于多重条件判断的请教
碰到一个问题,暂时想不到解决思路,请各位大神赐教
有个40万基础表,里面有号码,地址,用户ID,在用APP,在用硬件,希望判断两个号码是否是同一个人,思路是,号码两两比较 用户ID相同,那么给个0.3系数,如果地址相同,给个0.2系数,如果在用APP相同,给个0.1系数,在用硬件相同,给个0.1系数,当所有系数加起来大于0.5,那么两个号码是同一个人,这个时候给两个号码 赋予相同的 客户编号,比如A1,后面可以通过客户编号就能筛选出哪些号码可能是同一个人,求各位大神赐教思路,最好有代码
搜索更多相关主题的帖子: 相同 判断 多重 系数 号码 
2024-04-08 18:05
sharpex1
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2021-12-12
收藏
得分:0 
回复 2楼 yiyanxiyin
代码,四十多万的数据,如果真的号码两两比较是不是很慢
2024-04-08 18:19
sharpex1
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2021-12-12
收藏
得分:0 
回复 7楼 laowan001
这个方法我想过,存在问题,因为A号码可能和B号码 地址相同,和C号码 硬件相同,和D号码 软件相同,最后得到的系数是判断不了到底和哪个号码是 同一个人
2024-04-09 14:31
sharpex1
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2021-12-12
收藏
得分:0 
程序代码:
* 清除之前的定义
CLEAR

* 创建一个名为 BaseTable 的表,包含号码([color=#0000FF]Number)、地址(Address)、用户ID(UserID)、在用APP(UsingApp)、在用硬件(UsingHardware)字段[/color]
CREATE TABLE BaseTable (
    Number CHAR(10),
    Address CHAR(50),
    UserID CHAR(10),
    UsingApp LOGICAL,
    UsingHardware LOGICAL,
    CustomerID CHAR(10)
)

* 创建索引
INDEX ON UserID TAG UserID
INDEX ON Address TAG Address

* 初始化客户编号
LOCAL nBatchSize, nTotalRows, nCustomerID
nBatchSize = 1000  && 设置分批大小
nTotalRows = RECCOUNT()  && 获取总记录数
nCustomerID = 1  && 设置初始客户编号为1

* 分批处理数据
FOR i = 1 TO nTotalRows STEP nBatchSize
    SELECT BaseTable
    GO i IN 0
    SCAN WHILE NOT EOF() AND RECNO() < (i + nBatchSize)
        * 初始化系数和客户编号
        LOCAL nCoefficient
        nCoefficient = 0

        * 保存当前记录的 RECNO() 值,以便后续定位
        nCurrentRecno = RECNO()

        * 比较用户ID
        IF SEEK(BaseTable.UserID, 'UserID')
            nCoefficient = nCoefficient + 0.3
        ENDIF
            
        * 比较地址
        IF SEEK(BaseTable.Address, 'Address')
            nCoefficient = nCoefficient + 0.2
        ENDIF
            
        * 比较在用APP情况
        IF SEEK(BaseTable.UsingApp, 'UsingApp')
            nCoefficient = nCoefficient + 0.1
        ENDIF
            
        * 比较在用硬件情况
        IF SEEK(BaseTable.UsingHardware, 'UsingHardware')
            nCoefficient = nCoefficient + 0.1
        ENDIF
            
        * 如果系数总和大于0.5,则将两个号码设置为同一个客户编号
        IF nCoefficient > 0.5
            cCustomerID = "A" + LTRIM(STR(nCustomerID))  && 构造客户编号
            nCustomerID = nCustomerID + 1  && 递增客户编号
        ELSE
            cCustomerID = ""  && 如果系数总和小于等于0.5,则客户编号为空
        ENDIF
            
        * 更新客户编号
        IF nCurrentRecno > 0
            REPLACE CustomerID WITH cCustomerID FOR RECNO() = nCurrentRecno
        ENDIF
            
        * 移动到下一行
        SKIP
    ENDSCAN
ENDFOR

* 显示更新后的表
SELECT * FROM BaseTable

只会这样写代码,求大佬优化
2024-04-09 14:57
sharpex1
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2021-12-12
收藏
得分:0 
回复 12楼 laowan001
应该会误判,只判断出现次数,得到一个系数,最后根据系数求和值判断是不是同一个人,因为各系数对应的不是同一个号码,所以最后系数求和大于0.5,也根本不知道和哪个号码设置 相同的客户编号
2024-04-09 15:06
sharpex1
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2021-12-12
收藏
得分:0 
回复 15楼 yiyanxiyin
具体怎么实现,求教
2024-04-09 16:28
sharpex1
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2021-12-12
收藏
得分:0 
回复 17楼 吹水佬
你这个思路下我的客户编号怎么 添加呢。。。
2024-04-09 17:41
sharpex1
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2021-12-12
收藏
得分:0 
* 比较用户ID
        IF SEEK(BaseTable.UserID, 'UserID')
            nCoefficient = nCoefficient + 0.3
        ENDIF
请教一下这里为什么提示找不到别名
2024-04-09 17:46
sharpex1
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2021-12-12
收藏
得分:0 
回复 20楼 吹水佬
判断为同一个人,客户编号就赋予同样的编号,后面通过客户编号筛选做 下一步处理,已增加测试附件
号码归属客户判断.rar (413.3 KB)


[此贴子已经被作者于2024-4-10 11:50编辑过]

2024-04-10 09:02
sharpex1
Rank: 1
等 级:新手上路
帖 子:61
专家分:0
注 册:2021-12-12
收藏
得分:0 
论坛停了几天。。继续求教
2024-04-22 15:50
快速回复:关于多重条件判断的请教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014147 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved