标题:求个解决思路
只看楼主
hytizj023
Rank: 1
等 级:新手上路
帖 子:166
专家分:7
注 册:2023-3-2
结帖率:100%
已结贴  问题点数:20 回复次数:25 
求个解决思路




什么叫双飞:例如开奖号:123 那么双飞就是12 13 23,如果是112,那么双飞就是11 12
什么叫组3,当奖号出现为对子就叫组3(例如:898),不是对子就叫组6(例如:518),三个一样的叫豹子(例如:999)(图二当中的组选分区)
组选:就是把奖号从小到大排列

图1:我查询了历史记录089期的记录,一共21条记录,我要在这基础之上在计算出双飞出现率

把计算结果写入到表里
(shuangfei)表字段如下:字段类型:整形
零零,零一,零二,零三,零四,零五,零六,零七,零八,零九,一一,一二,一三,一四,一五,一六,一七,一八,一九
二二,二三,二四,二五,二六,二七,二八,二九,三三,三四,三五,三六,三七,三八,三九
四四,四五,四六,四七,四八,四九,五五,五六,五七,五八,五九,六六,六七,六八,六九,七七,七八,七九,八八,八九,九九

一共55个字段

我把他写成数字方便大家看:
00 01 02 03 04 05 06 07 08 09
11 12 13 14 15 16 17 18 19
22 23 24 25 26 27 28 29
33 34 35 36 37 38 39
44 45 46 47 48 49
55 56 57 58 59
66 67 68 69
77 78 79
88 89 99

(图3)我把表头改成了图片,用的数字好看一些。



怕你们没明白我在举个例子:
奖号;213   组选就是:123   双飞就是:12 13 23
奖号:595  组选就是:559   双飞就是:55 59
怎么把结果统计出来,每出现一次表里加1,表:默认值为:0

请教用什么方法要快一些,更科学。
搜索更多相关主题的帖子: 记录 思路 字段 结果 出现 
2023-04-10 13:53
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:1 
算概率?有点意思哈 不过咱不懂这玩意儿,专业术语/名词都得理解半天
2023-04-10 17:18
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:1 
试试是不是这个意思?
hytizj023.rar (2.19 KB)
2023-04-10 17:58
hytizj023
Rank: 1
等 级:新手上路
帖 子:166
专家分:7
注 册:2023-3-2
得分:0 
以下是引用csyx在2023-4-10 17:58:09的发言:

试试是不是这个意思?

感谢楼主就是这个意思,但我级别有限没太看懂,能不能帮我改一下我的程序
我的程序如下:
a=ALLTRIM(thisform.pageframe1.page1.text1.Value)
SELECT * from 本地数据 WHERE 期号 like "%"+a INTO CURSOR 历史
...............

我用的sql数据库
常规字段,我是做其他用处的
字段如下:和上面的一样

表名称:历史统计双飞

历史表:字段说明:
SCATTER TO C
d1=c(1)&&期号
d2=c(42)&&组选号

其实你只需要根据组选号判断就行了,组选号是我排好了的奖号(从小到大)组选号为:C,因为有0开头
奖号只有3位,这个是固定的
奖号:123 双飞:12 13 23 ,奖号:558 双飞:55 58    奖号:999 双飞:99  &&双飞只有这几种情况没别的


下面附上你的代码,方便你修改
程序代码:

c期号 = '089'    && 要统计的期号
*-- 建模拟数据表
Create Cursor 历史记录 (期号 V(10), 奖号 C(3))
Insert into 历史记录 (期号, 奖号) Values ('2002089', '956')&&569 56 59 69
Insert into 历史记录 (期号, 奖号) Values ('2003089', '516')&&156 15 16 56
Insert into 历史记录 (期号, 奖号) Values ('2004089', '191')&&119 11 19
Insert into 历史记录 (期号, 奖号) Values ('2005089', '885')&&588 58 88
Insert into 历史记录 (期号, 奖号) Values ('2006089', '910')&&019 01 09 19

If Used('shuangfei')
    Select shuangfei
    Locate for 期号 == c期号
    Blank next 1
    Replace next 1 期号 with c期号
Else
    cDesc = '零零,零一,零二,零三,零四,零五,零六,零七,零八,零九' ;
        + ',一一,一二,一三,一四,一五,一六,一七,一八,一九' ;
        + ',二二,二三,二四,二五,二六,二七,二八,二九' ;
        + ',三三,三四,三五,三六,三七,三八,三九' ;
        + '四四,四五,四六,四七,四八,四九' ;
        + ',五五,五六,五七,五八,五九' ;
        + ',六六,六七,六八,六九' ;
        + ',七七,七八,七九,八八,八九,九九'
    cFlds = '期号 C(3)'
    For ii = 1 to ALines(aTemp, cDesc, 1+4, ',')
        cFlds = cFlds + ',' + aTemp[ii] + ' I'
    EndFor
    Create Cursor shuangfei (&cFlds)
    Insert into shuangfei (期号) Values (c期号)
EndIf

*-- 开始干活儿, 提取数据填入双飞统计表
Select 奖号 from 历史记录 where 期号 like '%' + c期号 into array a奖号s

n期数 = _Tally
For ii = 1 to n期数
    Dimension a奖号[3]            && 开奖号是否恒定是三位数 ?
    a奖号[1] = Substr(a奖号s[ii], 1, 1)
    a奖号[2] = Substr(a奖号s[ii], 2, 1)
    a奖号[3] = Substr(a奖号s[ii], 3, 1)
    Asort(a奖号)                && 现在 X <= Y <= Z
    c组选号 = a奖号[1] + a奖号[2] + a奖号[3]
    c双飞号 = Chrtran('XY,XZ,YZ', 'XYZ', c组选号)    && 不太懂,应该就这三种组合吧?
    
    For jj = ALines(a双飞号, c双飞号, 1+4, ',') to 2 step -1
        If a双飞号[jj] == a双飞号[jj-1]        && 去重
            a双飞号[jj] = ''
        EndIf
    ENDFOR
    
    For jj = 1 to Alen(a双飞号)
        If Empty(a双飞号[jj])
            Loop
        EndIf
        c双飞号 = Chrtranc(a双飞号[jj], '0123456789', '零一二三四五六七八九')
        If Empty(Field(c双飞号, 'shuangfei'))
            MessageBox('shuangfei 表不存在 ' + c双飞号 + ' 字段')
        Else
            Update shuangfei set &c双飞号 = &c双飞号 + 1 where 期号 == c期号
        EndIf
    EndFor
EndFor
Browse




[此贴子已经被作者于2023-4-10 20:28编辑过]

2023-04-10 20:14
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:1 
需求仍不明确,我可以这样理解?
  根据筛选出来的【历史表】(仅需要其中的 [组选号码] 字段),统计各双飞组合出现的次数,并将统计结果更新到后台表【历史统计双飞】
问题:
  后台表【历史统计双飞】没看到 [期号] 字段,如何知道要更新哪一条记录?

2023-04-10 20:55
hytizj023
Rank: 1
等 级:新手上路
帖 子:166
专家分:7
注 册:2023-3-2
得分:0 
以下是引用csyx在2023-4-10 20:55:47的发言:

需求仍不明确,我可以这样理解?
  根据筛选出来的【历史表】(仅需要其中的 [组选号码] 字段),统计各双飞组合出现的次数,并将统计结果更新到后台表【历史统计双飞】
问题:
  后台表【历史统计双飞】没看到 [期号] 字段,如何知道要更新哪一条记录?

楼主理解是正确的,就是这个意思。
我把之前的【历史统计双飞】常规字段,改成了,用户名,就用户名作为判断,例如:用户名:hytizj023,就这样写吧!


[此贴子已经被作者于2023-4-10 21:40编辑过]

2023-04-10 21:34
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:1 
你这SQL表字段太多,我懒得建表,没测试
hytizj023(2).rar (940 Bytes)


[此贴子已经被作者于2023-4-10 22:12编辑过]

2023-04-10 22:09
hytizj023
Rank: 1
等 级:新手上路
帖 子:166
专家分:7
注 册:2023-3-2
得分:0 
以下是引用csyx在2023-4-10 22:09:03的发言:

你这SQL表字段太多,我懒得建表,没测试

楼主程序好像有错

多了三个字段出来,一共55个,程序运行出来有58个字段了(多了,一,七,八)

程序代码:
cTemp = Sys(2015)
Create Cursor (cTemp) (code V(4), cnt I)
cFlds = '零零,零一,零二,零三,零四,零五,零六,零七,零八,零九' ;
    + ',一一,一二,一三,一四,一五,一六,一七,一八,一九' ;
    + ',二二,二三,二四,二五,二六,二七,二八,二九' ;
    + ',三三,三四,三五,三六,三七,三八,三九' ;
    + '四四,四五,四六,四七,四八,四九' ;
    + ',五五,五六,五七,五八,五九' ;
    + ',六六,六七,六八,六九' ;
    + ',七七,七八,七九,八八,八九,九九'
    
For ii = 1 to ALines(aFlds, cFlds, 1+4, ',')
    Insert into (cTemp) (code) Values (aFlds[ii])
EndFor

Select 本地数据

&&本地数据是总表,历史表就是根据本地数据表查询而来的 &&SELECT * from 本地数据 WHERE 期号 like "%"+a INTO CURSOR 历史
Scan all
    Scatter name oRec Fields 期号,组选号
    c双飞号 = Chrtran('XY,XZ,YZ', 'XYZ', m.oRec.组选号)
    For jj = ALines(a双飞号, c双飞号, 1+4, ',') to 2 step -1
        If a双飞号[jj] == a双飞号[jj-1]        && 去重
            a双飞号[jj] = ''
        EndIf
    EndFor
    For jj = 1 to Alen(a双飞号)
        If !Empty(a双飞号[jj])
            c双飞号 = Chrtranc(a双飞号[jj], '0123456789', '零一二三四五六七八九')
            Insert into (cTemp) (code, cnt) Values (c双飞号, 1)
        EndIf
    EndFor
EndScan

Select code, Sum(cnt) as cnt from (cTemp) group by code into cursor (cTemp)
Select (cTemp)
cUpd = ''
Scan all
    cUpd = cUpd + Textmerge(',[<<code>>]=<<cnt>>')
EndScan
Text to m.cSql Noshow textmerge pretext 1+2+4+8
    Update [历史统计双飞] set <<Substr(cUpd,2)>> where [用户名] = 'hytizj023';
        
EndText

*-- 更新到后台
*    nResult = SQLExec(hSql, cSql, cTemp)
*Use in Select(cTemp)

nResult = SQLExec(hSql, cSql, cTemp)&&这里能不能帮我写一下,我不知道怎么写,你那个字段好像随时在变,基础不太好,麻烦了,感谢
你这个程序运行速度哪个杠杠的
2023-04-11 12:03
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:1 
没有原始数据没法跟踪啊,你这样,看看出现 一、七、八 时的组选号码是多少?

Scan all
    ...
    For jj = 1 to Alen(a双飞号)
*- 调试用 ---------------------------
if alltrim(a双飞号[jj]) == '一'       && 七,八
    messagebox(oRec.组选号)
endif
*------------------------------------
        If !Empty(a双飞号[jj])
            c双飞号 = Chrtranc(a双飞号[jj], '0123456789', '零一二三四五六七八九')
            Insert into (cTemp) (code, cnt) Values (c双飞号, 1)
        EndIf
    EndFor
EndScan

============================
补充: 哦,猜测可能是你说的豹子号。如果是三个相同的号码,我不清楚要不要统计到双飞里面?
不算双飞号的话就无所谓,后台表没这种字段,不影响更新结果
要是算双飞号码的话,算做一个还是两个?ex: 666 算一个 66,还是算出现了两个 66 ?
============================


[此贴子已经被作者于2023-4-11 12:42编辑过]

2023-04-11 12:18
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:1 
nResult = SQLExec(hSql, cSql, cTemp)

这句你只要把 hSql 换成你的 SQL 连接句柄就行了

[此贴子已经被作者于2023-4-11 12:41编辑过]

2023-04-11 12:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-511857-1-1.html




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

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