Foxpro查询从每个组中选择一条记录
我希望能找到一个简单的SQL解决方案来解决我的问题。我搜索了一个,但一直无法找到任何适合我情况的东西。Foxpro查询从每个组中选择一条记录
我有一个.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
此代码假定要从每个包组选择一个客户,而不管哪一个是(与分钟(客户ID)选择所述一个)的 - (它可能是最大值(客户ID),或使用更长的SQL,从每个组中挑选前1名 - 就像您使用unique做的那样 - 或者再次使用更长的SQL,按特定顺序排列,然后从每个组中挑选N个,如果需要随机选择选择)。
注意:这是一个黑客,我不会真的建议,并依靠版本7和更旧的bug。即:
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
我在我的搜索中看到了您的建议黑客,并希望找到替代方案,尤其是因为我没有客户ID字段允许我使用第一个查询。但时间不够,无论如何都是用它。不过,我稍后做了一些测试,并使用姓名或地址数据获得了可接受的结果,并将在未来使用。 –
我明白了,你可以使用recno()创建一个'virtual'customerId,但是一张表应该有一个主键(在VFP自己的示例中,我们看到一个没有PK :() –
这些文件不是生产数据库的一部分,但只是一次性使用的文件,Dbf恰好是美国商业邮件行业使用的标准格式 –
您是否有任何条件从每个组中获取单条记录,例如最新记录? – Viki888
不幸的是,没有。没有ID或日期字段。 –
然后慷慨地提供表架构 – Viki888