数据库中记录如下:
      姓名    性别    成绩    时间
     张三     男      90     2005-9-1 10:00:00
     李四     女      80     2005-9-2 10:00:00
     张三     男      92     2005-9-3 10:00:00
     王五     男      83     2005-9-4 10:00:00 
     李四     女      80     2005-9-4 11:00:00
     …… ……
     …… ……问题:在DBGrid或者Listview中根据“时间”显示数据库中每个人的最新一条记录(在数据库中未知有多少人的情况下),麻烦各位高手帮看一下,谢谢!

解决方案 »

  1.   

    是不是将最新的排在最前面?select 姓名,性别,成绩,时间 from ta order by 姓名 and 时间 DECS 
      

  2.   

    create table info (姓名 char(8),性别 char(2),成绩 int,时间 datetime)insert into info values('李四','女',80,'2005-9-2')
    insert into info values('张三','男',92,'2005-9-3')
    insert into info values('王五','男',83,'2005-9-4')
    insert into info values('李四','女',80,'2005-9-1')select * from info where 时间 in(select max(时间) from info group by 姓名)结果:
    /*
    李四     女 80 2005-09-02 00:00:00.000
    张三     男 92 2005-09-03 00:00:00.000
    王五     男 83 2005-09-04 00:00:00.000
    */ 
      

  3.   

    新建一个Application,添加一个ListView和一个ADOQuery
    给ListView添加Item
    给窗体添加FormShow事件:
    procedure TForm1.FormShow(Sender: TObject);
    var
      ListItem:TListItem;
      sqlf:string;
      i:integer;
    begin
      ListView1.ViewStyle:=vsReport;
      ListView1.ReadOnly:=True;
      ListView1.RowSelect:=True;
      With ADOQuery1 do
      begin
          ConnectionString:='Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=Northwind;Data Source=localhost';
          Active:=False;
          sqlf:='select 姓名,性别,成绩,时间 from info where 时间 in(select max(时间) from info group by 姓名)';
          sql.Text:=sqlf;
          Active:=True;
          if RecordCount >0 then
          begin
             for i:=0 to RecordCount-1 do
             begin
                  ListItem:=ListView1.Items.Add;
                  ListItem.Caption:=Fields[0].AsString;
                  ListItem.SubItems.Add(Fields[1].AsString);
                  ListItem.SubItems.Add(Fields[2].AsString);
                  ListItem.SubItems.Add(Fields[3].AsString);
                  Next;
             end;
          end;
      end;
    end;
      

  4.   

    把FormShow事件中的代码移到查询按钮事件下就可以了。
      

  5.   

    问题解决 , 谢谢 Ciny_Cou() 的指导!