| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2080 人关注过本帖
标题:vfp 自动找到每一颗物料的最新交易价格。 do max查询(存货表,日期,料号) ...
取消只看楼主 加入收藏
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
vfp 自动找到每一颗物料的最新交易价格。 do max查询(存货表,日期,料号)
很多时候我需要查询到物料的最新价格,其中包含有采购价、存货价、销售价、市场价等等很多很多。…………


没一张表我都会用同样的代码来实现查询功能。代码如下:

程序代码:


select * from 存货表 t1 rgiht join (select max(日期) 日期,料号 from 存货表 group by 2 ) t2 on t1.日期=t2.日期 and t1.料号=t2.料号



 


每次来一张新的表格,我都需要重复的编写这样的代码,有没有一种方法可以实现让我运行某一个小的程序,自动获取到这张表的最新价格。


可以变动的字段有:表的名字可能会有变动(例如:存货表、采购表、发票表、订单表等等)。日期字段也会改成不同的名字(例如:日期、期间、年等等)。其他的都无所谓。


如果程序可以直接写成为:   

do  查询(价格表,日期字段,料号)

然后可以实现查询价格表里里面,日期最大的时候的详细信息。查询的理论是:“找到每一颗物料的最新交易价格。”



[此贴子已经被作者于2018-5-4 22:26编辑过]

搜索更多相关主题的帖子: 最新 价格 max 查询 日期 
2018-05-04 22:09
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
收藏
得分:0 
以下是引用mywisdom88在2018-5-4 23:06:41的发言:

select * from 存货表 t1 ;
inner join (select max(日期) as 日期,料号 from 存货表 group by 料号 ) t2 on t1.日期=t2.日期 and t1.料号=t2.料号;
where t1.料号 = allt(thisform.text1.value) &&



谢谢你的解答,一个一个的查询,我自己能搞定,需要的是知道怎么样可以编写一段子程序,然后通过运行子程序来获得新的表(新表内容为物料的最新交易价格。)而且这个子程序是一劳永逸的,可以实现不同表的最新交易价格查询。
2018-05-05 12:07
hyz00001
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:168
专家分:137
注 册:2012-10-5
收藏
得分:0 
以下是引用mywisdom88在2018-5-5 13:53:13的发言:

*!* 测试数据
SET CENTURY ON
SET DATE YMD
CREATE CURSOR tt(序号 i,日期 d,物料 c(20),价格 n(10,2))

INSERT INTO tt(序号,日期,物料,价格) VALUES (1,{^2018-05-01},"电脑01",INT(RAND()*10))
INSERT INTO tt(序号,日期,物料,价格) VALUES (2,{^2018-05-02},"电脑01",INT(RAND()*10))
INSERT INTO tt(序号,日期,物料,价格) VALUES (3,{^2018-05-03},"电脑01",INT(RAND()*10))
INSERT INTO tt(序号,日期,物料,价格) VALUES (4,{^2018-05-01},"电脑02",INT(RAND()*10))
INSERT INTO tt(序号,日期,物料,价格) VALUES (5,{^2018-05-04},"电脑02",INT(RAND()*10))
INSERT INTO tt(序号,日期,物料,价格) VALUES (6,{^2018-05-06},"电脑02",INT(RAND()*10))
INSERT INTO tt(序号,日期,物料,价格) VALUES (7,{^2018-05-02},"电脑03",INT(RAND()*10))
INSERT INTO tt(序号,日期,物料,价格) VALUES (8,{^2018-05-05},"电脑03",INT(RAND()*10))
INSERT INTO tt(序号,日期,物料,价格) VALUES (9,{^2018-05-06},"电脑03",INT(RAND()*10))

* BROWSE



LOCAL tmp

tmp = GetMax("TT","日期","物料")
IF !EMPTY(tmp)
   SELECT (tmp)
   BROWSE
ELSE
   MESSAGEBOX("参数有问题")   
ENDIF
   

*!* 调用函数,参数正常时,返回非空值的临时表名称
FUNCTION GetMax(cTableName,cDateField,cGroupField)
 LOCAL tmp_TableName,cSql
 tmp_TableName = ""
 cSql = ""
 *!* 检测源表
 IF TYPE("cTableName") = "C"  AND USED(cTableName) AND TYPE("cDateField") = "C" AND TYPE("cGroupField") = "C"
    tmp_TableName = LOWER("tmp"+SYS(2015))
    TEXT TO cSql TEXTMERGE NOSHOW PRETEXT 4
     SELECT t1.* FROM <<cTableName>> AS t1 ;
      RIGHT JOIN (SELECT MAX(<<cDateField>>) AS <<cDateField>> ,<<cGroupField>> FROM <<cTableName>> GROUP BY <<cGroupField>>) AS t2 ;
      ON t1.<<cGroupField>> = t2.<<cGroupField>> and t1.<<cDateField>> = t2.<<cDateField>> ;
      INTO CURSOR <<tmp_TableName>> READWRITE ;
      ORDER BY t1.<<cGroupField>>
    ENDTEXT
*   messagebox(cSql) &&观察生成的SQL语句对不对
    EXECSCRIPT(cSql)
 ENDIF
 RETURN tmp_TableName
ENDFUNC



就是这个效果,你是怎么样做到的,真厉害。
2018-05-07 14:10
快速回复:vfp 自动找到每一颗物料的最新交易价格。 do max查询(存货表,日期, ...
数据加载中...
 
   



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

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