Foxpro Select 每个客户的最新订单

Foxpro Select Most Recent Order for Each Customer

在 foxpro table 中,我有 4 个字段:ordernum、orderdate、ordertotal、custpk。

foxpro select 对每个 custpk 的最新订单中 return 所有这些字段的声明是什么?

I need a foxpro command, not SQL database

首先让我们说,您无法通过单个 Foxpro 命令行获得所需的结果。

相反,在 Foxpro 中获取此信息的最便捷方式是在 FP/VFP 数据 Table 上使用 Foxpro 的 SQL 查询命令 运行 并将结果数据导入一个数据table/cursor。

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 >  

有多种方法可以仅获取每位客户的最新订单,但从这里开始,看看是否能满足您的需求。

顺便说一句:您可能想花一些时间观看免费的在线 VFP 教程视频,网址为: Free Visual Foxpro Videos

祝你好运

你的table结构和你想要的不是很清楚。您如何定义给定客户的 "most recent order"?假设 orderNum 是 table 中的主键,并且您根据每个客户具有最高 orderNum 的行为给定客户决定 "most recent order"。然后很容易,一个 VFP select 命令就足够了(实际上有很多 SQL select 变体可以 return 你需要的结果。下面是其中之一那将是最有效的):

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

顺便说一句,VFP 的 SQL 接近 ANSI-SQL 92.

I would like to find how to do it with just the sql query command

好吧,我只用了一个 SQL 查询命令,但是您必须跟进一些其他代码。

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

虽然仍然不是ONE LINE方法,但另一种方法可能是:

* --- 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 语言

祝你好运