注册 登录
编程论坛 VFP论坛

合并列表中指定时间的数据

aroffice 发布于 2023-09-20 13:27, 361 次点击
有一个表ZZ有一个字段为dqrq 字段类型为 T,字段zjh 类别为C ,另有一个YY,结构相同

现在要将两个表合并,合并要求为YY中的记录与ZZ表中 zjh不一致的,追加进来。
zjh一致的,需要判断dqrq是为在60分钟以内,如果在60分钟以内,不合并,如果差距在60分钟及以上的合并。
zjh不一致的我知道如何处理。
现在关键是处理zjh一致,但时间差在60分钟以内的数据如何追加

[此贴子已经被作者于2023-9-20 14:15编辑过]

3 回复
#2
xuminxz2023-09-20 16:06
回复 楼主 aroffice
程序代码:
SELECT * FROM yy WHERE  zjh ! in (SELECT zjh FROM zz)  INTO CURSOR tmp
SELECT zz
APPEND FROM DBF('tmp')
SELECT a.* FROM yy a,zz b WHERE a.zjh==b.zjh AND a.dqrq-b.dqrq>3600 INTO tmp
SELECT zz
APPEND FROM DBF('tmp')
#3
aroffice2023-09-21 09:30
回复 2楼 xuminxz
使用你的代码感觉得到的结果与我所需要的有差距。
我做了些模拟数据,需要追加为我标记为了1,不需要追加的标记为了0
只有本站会员才能查看附件,请 登录


这个附件里是模拟数据
只有本站会员才能查看附件,请 登录
#4
aroffice2023-09-21 14:52
USE ZZ
COPY TO BAK
USE BAK
ALTER TABLE BAK ADD LY C(1)
REPLACE LY WITH "A" ALL

APPEND FROM YY
REPLACE LY WITH "B" FOR EMPTY(LY)
SELECT * FROM BAK ORDER BY ZJH,DQRQ DESC,LY INTO DBF PXXXK

CLOSE DATABASES ALL
DELETE FILE BAK.DBF

USE PXXXK
GOTO TOP
T_SJ=DATETIME()
T_ZJH=""
SCAN
    IF T_ZJH=ZJH THEN
        IF ABS(T_SJ-DQRQ)/60<30 THEN
            DELETE
        ELSE
            T_SJ=DQRQ
        ENDIF
    ELSE
        T_SJ=DQRQ
        T_ZJH=ZJH
    ENDIF
ENDSCAN
PACK

SELECT * FROM PXXXK WHERE LY='B' INTO DBF BAK
USE ZZ

APPEND FROM BAK
1