求一条FoxPro语句,查询出表中按某个字段分类的最大日期的记录!内详,高手入!

时间:2020-12-02 15:08:34
表table1(id,acctno,date),其中有记录:
1,0001,20120102
2,0001,20120103
3,0002,20120102
4,0002,20120104
...
要求:查询出表table1中每个acctno日期最大的那条记录。查询结果如:
2,0001,20120103
4,0002,20120104
...

11 个解决方案

#1


本帖最后由 apple_8180 于 2012-08-30 11:15:38 编辑
*-- vfp9.0 以下
Select id,acctno,Max(date) As date From table1 Group By acctno

*-- vfp9.0
Sys(3099,70)
Select id,acctno,Max(date) As date From table1 Group By acctno
Sys(3099,90)


Select max(id) As id,acctno,Max(date) As date From table1 Group By acctno

#2


楼上的方法有一上问题,就是取的不唯一,如果我表table1中还有其它字段的话,它本来该取最大日期那一行的记录的,却会取到其它记录里的值,比如:加一个字段 bianh
id,acctno,bianh,date
1,0001,1234566,20120102
2,0001,1234777,20120103
它本来该取2,0001,1234777,20120103,结果它会取成
2,0001,1234566,20120103
你可以试一下

#3


楼主:不是批评你,话要一次性说完,不要说一半留一半,按照你提的问题及要求达到的结果,豆老师的代码没有问题。建议下次提问题时,一定要把自己的意思表达清楚。

#4


你的 vfp 版本?
你运行的上面哪段代码?

#5


create table temp (id int,acctno c(10),date c(10))
insert into temp values (1,'0001','20120102')
insert into temp values (2,'0001','20120103')
insert into temp values (3,'0002','20120102')
insert into temp values (4,'0002','20120104')

Select a.id,b.acctno,b.date From temp a,(Select acctno,Max(date) as date From temp Group By acctno ) b Where a.acctno = b.acctno And a.date = b.date

#6


引用 2 楼  的回复:
楼上的方法有一上问题,就是取的不唯一,如果我表table1中还有其它字段的话,它本来该取最大日期那一行的记录的,却会取到其它记录里的值,比如:加一个字段 bianh
id,acctno,bianh,date
1,0001,1234566,20120102
2,0001,1234777,20120103
它本来该取2,0001,1234777,20120103,结果它会取成
2,0001,……

你叫加字段,我也加字段
Select a.id,a.bianh,b.acctno,b.date From temp a,(Select acctno,Max(date) as date From temp Group By acctno ) b Where a.acctno = b.acctno And a.date = b.date

#7


*--- VFP9.0(汉化版) 代码
*--- 文件版本:9.0.0.7423
Select id,acctno,BIANH,MAX(date) DATE From temp GROUP BY ACCTNO

#8


引用 6 楼  的回复:
引用 2 楼 的回复:
楼上的方法有一上问题,就是取的不唯一,如果我表table1中还有其它字段的话,它本来该取最大日期那一行的记录的,却会取到其它记录里的值,比如:加一个字段 bianh
id,acctno,bianh,date
1,0001,1234566,20120102
2,0001,1234777,20120103
它本来该取2,0001,1234777,20120103,结果……


FoxPro不支持这这种嵌套的,我早就试过了

#9


引用 3 楼  的回复:
楼主:不是批评你,话要一次性说完,不要说一半留一半,按照你提的问题及要求达到的结果,豆老师的代码没有问题。建议下次提问题时,一定要把自己的意思表达清楚。

我接受你的批评,下次一定三思而后发帖

#10


Create Table table1 (Id Int,acctno c(10),bianh c(10),Date c(10))
Insert Into table1 Values (1,'0001','1111','20120102')
Insert Into table1 Values (2,'0001','2222','20120103') && 取此条
Insert Into table1 Values (3,'0002','9999','20120102')
Insert Into table1 Values (4,'0002','6666','20120104') && 取此条
Browse && 看一下原始记录

Select * From table1 A Where Not Exists (Select 1 From table1 B Where A.acctno=B.acctno And A.Date<B.Date)
*--   或
*-- 下面这句可能需要 vfp9.0 
Select a.Id,b.acctno,a.bianh,b.Date From table1 a,(Select acctno,Max(Date) As Date From table1 Group By acctno ) b Where a.acctno = b.acctno And a.Date = b.Date

#11


引用 8 楼  的回复:
FoxPro不支持这这种嵌套的,我早就试过了


不是vfp不支持
是你的vfp不支持

10楼豆老师给完美答案了

#1


本帖最后由 apple_8180 于 2012-08-30 11:15:38 编辑
*-- vfp9.0 以下
Select id,acctno,Max(date) As date From table1 Group By acctno

*-- vfp9.0
Sys(3099,70)
Select id,acctno,Max(date) As date From table1 Group By acctno
Sys(3099,90)


Select max(id) As id,acctno,Max(date) As date From table1 Group By acctno

#2


楼上的方法有一上问题,就是取的不唯一,如果我表table1中还有其它字段的话,它本来该取最大日期那一行的记录的,却会取到其它记录里的值,比如:加一个字段 bianh
id,acctno,bianh,date
1,0001,1234566,20120102
2,0001,1234777,20120103
它本来该取2,0001,1234777,20120103,结果它会取成
2,0001,1234566,20120103
你可以试一下

#3


楼主:不是批评你,话要一次性说完,不要说一半留一半,按照你提的问题及要求达到的结果,豆老师的代码没有问题。建议下次提问题时,一定要把自己的意思表达清楚。

#4


你的 vfp 版本?
你运行的上面哪段代码?

#5


create table temp (id int,acctno c(10),date c(10))
insert into temp values (1,'0001','20120102')
insert into temp values (2,'0001','20120103')
insert into temp values (3,'0002','20120102')
insert into temp values (4,'0002','20120104')

Select a.id,b.acctno,b.date From temp a,(Select acctno,Max(date) as date From temp Group By acctno ) b Where a.acctno = b.acctno And a.date = b.date

#6


引用 2 楼  的回复:
楼上的方法有一上问题,就是取的不唯一,如果我表table1中还有其它字段的话,它本来该取最大日期那一行的记录的,却会取到其它记录里的值,比如:加一个字段 bianh
id,acctno,bianh,date
1,0001,1234566,20120102
2,0001,1234777,20120103
它本来该取2,0001,1234777,20120103,结果它会取成
2,0001,……

你叫加字段,我也加字段
Select a.id,a.bianh,b.acctno,b.date From temp a,(Select acctno,Max(date) as date From temp Group By acctno ) b Where a.acctno = b.acctno And a.date = b.date

#7


*--- VFP9.0(汉化版) 代码
*--- 文件版本:9.0.0.7423
Select id,acctno,BIANH,MAX(date) DATE From temp GROUP BY ACCTNO

#8


引用 6 楼  的回复:
引用 2 楼 的回复:
楼上的方法有一上问题,就是取的不唯一,如果我表table1中还有其它字段的话,它本来该取最大日期那一行的记录的,却会取到其它记录里的值,比如:加一个字段 bianh
id,acctno,bianh,date
1,0001,1234566,20120102
2,0001,1234777,20120103
它本来该取2,0001,1234777,20120103,结果……


FoxPro不支持这这种嵌套的,我早就试过了

#9


引用 3 楼  的回复:
楼主:不是批评你,话要一次性说完,不要说一半留一半,按照你提的问题及要求达到的结果,豆老师的代码没有问题。建议下次提问题时,一定要把自己的意思表达清楚。

我接受你的批评,下次一定三思而后发帖

#10


Create Table table1 (Id Int,acctno c(10),bianh c(10),Date c(10))
Insert Into table1 Values (1,'0001','1111','20120102')
Insert Into table1 Values (2,'0001','2222','20120103') && 取此条
Insert Into table1 Values (3,'0002','9999','20120102')
Insert Into table1 Values (4,'0002','6666','20120104') && 取此条
Browse && 看一下原始记录

Select * From table1 A Where Not Exists (Select 1 From table1 B Where A.acctno=B.acctno And A.Date<B.Date)
*--   或
*-- 下面这句可能需要 vfp9.0 
Select a.Id,b.acctno,a.bianh,b.Date From table1 a,(Select acctno,Max(Date) As Date From table1 Group By acctno ) b Where a.acctno = b.acctno And a.Date = b.Date

#11


引用 8 楼  的回复:
FoxPro不支持这这种嵌套的,我早就试过了


不是vfp不支持
是你的vfp不支持

10楼豆老师给完美答案了