2017-08-11 128 views
0

在福克斯表中,我有4个字段:ordernum,orderdate,ordertotal,custpk。Foxpro选择每个客户的最新订单

什么是foxpro select语句将每个custpk的最近订单的所有这些字段返回?

+0

之前,我们可以给你一个答案,第一要问的问题是:ordernum和orderdate的字段类型是什么。 OrderNum是数字还是字符类型?订购日期是日期,日期时间还是字符类型? SQL查询语法可能会根据您的答案而有所不同。 – Dhugalmac

+0

订单日期是日期字段,ordernum是整数,ordertotal是N 9,2,Custpk是整数。为了清楚起见,这是一个福克斯表,我需要一个foxpro命令,而不是SQL数据库。 – EddieC

回答

2

你的表结构,你想要什么不是很清楚。您如何定义给定客户的“最近订单”?假设orderNum是该表中的主键,并且您为每个客户具有最高orderNum的行中的给定客户决定“最近订单”。那么很容易和一个VFP SELECT命令就足够了(实际上有许多SQL选择将返回你所需要的结果的变化下面是那些将是最有效的一个。):

select * from myTable ; 
    where orderNum in ; 
    (select max(orderNum) from myTable group by custPK) 

BTW, VFP的SQL接近ANSI-SQL 92

0

我需要一个FoxPro命令,而不是SQL数据库

让我们首先应该说你不会得到你想要一个FoxPro命令行的东西。

取而代之,在Foxpro中获得这个最方便的方式是使用Foxpro的SQL查询命令在FP/VFP数据表上运行,并将结果数据导入数据表/光标。

SELECT CustPk, OrderNum, OrderDate, OrderTotal FROM MyDataTable ORDER BY CustPk, OrderDate Desc INTO CURSOR OrderedData READWRITE 
* --- Now ordered data is in memory cursor, use it however you need --- 
* --- Each Customer's Most Recent Order will be first record --- 
SELECT OrderedData 
* --- You might just want to BROWSE the results to understand how the data appears --- 
* --- Or you can do anything else with the data --- 
< do whatever > 

有办法得到的只有每位客户最近的订单,但是从这里开始,看看是否得到你所需要的。

BTW:你可能想在花一些时间在免费,在线VFP教程视频: Free Visual Foxpro Videos

好运

+0

谢谢,这是我过去所做的,然后删除所有不需要的记录。我不知道foxpro的SQL查询以及我应该一直诉诸于此。我想找到如何使用sql查询命令。 – EddieC

+0

VFP的SQL查询语法大部分与其他数据库SQL查询语法相同。诚然,FP/VFP有一些不同之处,但请尝试一下你知道的事情,看看它是否可行 - 很可能。然后如果没有,则只需将查询语法的哪一部分不起作用,然后用FP/VFP命令语法替换该部分即可。 – Dhugalmac

0

我想找到如何只用sql查询命令

嗯,我只是一个SQL查询命令,这样做是做,但你必须跟进其他一些代码。

编辑:糟糕:我忘记了Custpk是整数。
我正在修改SQL查询语法以将其考虑在内。

虽然它仍然不是单行法,另一种可能是:

* --- Get reference records of only customer's last order date --- 
SELECT STR(CustPk) AS cCustPk, MAX(OrderDate) AS LstOrdrDt FROM MyDataTable GROUP BY CustPk INTO CURSOR LstOrds READWRITE 
* --- Now use that to get the complete last order for each customer --- 
SELECT * FROM MyDataTable WHERE (STR(CustPk) + DTOS(OrderDate)) IN (SELECT cCustPk + DTOS(LstOrdrDt) AS KeyExp FROM LstOrds) INTO CURSOR OnlyLstOrds READWRITE 
* --- Now you have ONLY the last orders --- 
SELECT OnlyLstOrds 
< do whatever > 

注意上面的代码是现成的,袖口和没有测试过,所以有可能是它其中一个错字你可以修复。

还要注意的是自由的一个,在该网站上线VFP教程视频被命名为:的FoxPro和SQL语言

好运

+0

VFP支持子查询和派生查询。你可以简单地使用派生表来编写:select * from myTable t1 inner join(通过custPK从myTable组中选择custPK,max(OrderDate)作为maxDate)t1.custPK = t2.custPK和t1.OrderDate = t2.OrderDate (但是,这并不意味着要返回最近的订单,除非在给定的日期,对于给定的客户只有单一订单)。 –