Foxpro 查询每个组中的 select 条记录

Foxpro query to select a single record from each group

我希望找到一个简单的 SQL 解决我的问题的方法。我已经搜索过一个,但找不到适合我情况的任何东西。

我有一个包含客户数据的 .dbf,包括客户姓名、地址和其他信息,用于商业邮寄。每条记录都分配给一个组或包裹,每个包裹将单独邮寄。有时我需要从一个或多个组中提取记录,放入一个新的 dbf 中,以设置为客户端种子,用新的名称和地址更新它们,这样客户端就会在邮件中收到一封信件的副本。通常它只有一个或两个组,在这种情况下,我可以简单地选择第一条记录,或者找到属于不同组的两个连续记录。目前我有一个包含 6 个组的文件,我需要每个组中的一条记录。

基本上我想执行以下操作,但我知道这个命令不起作用。

select * from customer group by package into table seeds

执行此操作的一种方法是执行以下操作:

use customer
index on package unique
set order to package
copy to seeds
delete tag all

或者,我可以将每个组中的一条记录复制到单独的文件中,然后将它们附加到单个种子文件中。

有没有办法使用 sql select 语句从每个组中获取一条记录?

Select * From Customers ;
    where CustomerId In ;
      (Select Min(CustomerId) From Customers Group By package) ;
    order By package ;
    into Cursor crsResult ;
    nofilter

此代码假定您希望从每个包裹组中 select 一位客户,而不管是哪一位(select 与 min(customerId) 匹配)-(它可以是 max(CustomerId) 或者,使用更长的 SQL,从每个组中选择前 1 个 - 就像你使用 unique 所做的那样 - 或者,再次使用更长的 SQL,以特定顺序订购并选择第 N 个组,或者如果您需要对 selects 进行随机化,则从每个组中随机选择。

注意:这是一个我不会真正建议的 hack,它依赖于版本 7 和更早版本中的错误。即:

Set EngineBehavior 70
*** Last physically entered from each group
Select * From Customers ;
    group By package ;
    into Cursor result ;
    nofilter
Browse

*** Or ordered by something - this one corresponds to unique index trick
Select * from ;
 (Select * From Customers order by 1 desc) t ;
    group By Package ;
    into Cursor result ;
    nofilter
browse
Set EngineBehavior 90