Foxpro查询从每个组中选择一条记录

时间:2016-11-09 06:58:25

标签: sql visual-foxpro foxpro

我希望找到一个简单的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语句从每个组中获取单个记录?

1 个答案:

答案 0 :(得分:1)

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

此代码假定您要从每个软件包组中选择一个客户,而不管是哪个客户(选择具有min(customerId)的客户) - (可能是max(CustomerId),或者使用更长的SQL,从每个组中选择前1个 - 就像你使用unique一样 - 或者再次使用更长的SQL,按特定顺序排序并按组选择Nth,或者如果需要随机选择,则从每个组中随机选择)。 / p>

注意:这是一个我不会真正建议并且依赖于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