我有一个表,如下:   编号  产量   销量    日期
                      A    B      C      D
                   1     23    33     2008-9-2
                   2     22     35    2008-9-2
                   3     20     36    2008-9-2
                   4     25     33    2008-9-2 
                   1     24    35     2008-9-3
                   2     24     36    2008-9-3
                   3     23     33    2008-9-3
                   4     23     36    2008-9-3
编号总共有1,2,3,4;四种,日期每天都在更新,一天一更新,我想要检索出最近日期的4个编号的相关数据,请问应该怎么写。
数据如上,我要检索出9月3号的4组数据的sql语句应该怎么写?

解决方案 »

  1.   

    select * from tb where d in(select max(d) from tb);
      

  2.   

    select * from test where D in(
    select MAX(D) from test group by A)如果数据量大的话应该会很慢
      

  3.   

    SELECT * FROM TEST A
    WHERE A.D IN (SELECT MAX(D) FROM TEST B WHERE A.A = B.A GROUP BY B.A)
      

  4.   


                          A    B      C      D 
                      1    23    33    2008-9-2 
                      2    22    35    2008-9-2 
                      3    20    36    2008-9-2 
                      4    25    33    2008-9-2 
                      1    24    35    2008-9-3 
                      2    24    36    2008-9-3 
                      3    23    33    2008-9-3 
                      4    23    36    2008-9-3 select * from table_name 
       where (a,to_char(d,'yyyy-mm-dd')) in (select a,to_char(max(d),'yyyy-mm-dd') from table_name 
       group by a);虽然看起来比较麻烦,但是这个是取到每一个编号最新的数据
      

  5.   


    create table t_test
    (
    t_id int,
    t_cnum int,
    t_snum int,
    t_time varchar(255)
    )insert into t_test values(1,23,33,'2008-09-02');
    insert into t_test values(2,22,35,'2008-09-02');
    insert into t_test values(3,20,36,'2008-09-02');
    insert into t_test values(4,25,33,'2008-09-02');
    insert into t_test values(1,24,35,'2008-09-03');
    insert into t_test values(2,24,36,'2008-09-03');
    insert into t_test values(3,23,33,'2008-09-03');
    insert into t_test values(4,23,36,'2008-09-03');
    select * from t_test;select * from t_test 
      where (t_id,t_time) in (select t_id,max(t_time) from t_test 
      group by t_id); 验证了把楼上的,确实没问题!