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