商品编码   品名   采购价       日期
AFBJ001  小方桌 28.0 2005-06-11 00:00:00.000
AFBJ001  小方桌 28.0 2006-05-26 00:00:00.000
AFBJ001  小方桌 24.0 2005-08-31 00:00:00.000
AFBJ001  小方桌 28.0 2005-12-29 00:00:00.000
AFBJ001  小方桌 28.0 2006-01-26 00:00:00.000
AFBJ001  小方桌 28.0 2006-04-29 00:00:00.000
AFBJ001  小方桌 30.0 2006-03-31 00:00:00.000
AFBJ001  小方桌 28.0 2006-03-17 00:00:00.000
AFBJ001  小方桌 32.0 2006-03-24 00:00:00.000
AFBJ002  方桌 60.0 2005-06-11 00:00:00.000
AFBJ002  方桌 25.0 2006-05-26 00:00:00.000
AFBJ002  方桌 55.0 2005-08-31 00:00:00.000 查询结果,检索出最近一次采购价格!商品编码   品名   采购价       日期
AFBJ001  小方桌 28.0 2006-05-26 00:00:00.000
AFBJ002  方桌 25.0 2006-05-26 00:00:00.000

解决方案 »

  1.   

    select * from tablename  a WHERE 1>(SELECT COUNT(*) FROM tablename b WHERE a.日期<b.日期 and a.商品编码=b.商品编码)
      

  2.   


    declare @tab table(商品编码 varchar(20),品名 varchar(20),采购价 decimal(10,1),日期 datetime)

    insert @tab values('AFBJ001','小方桌',28.0,'2005-06-11 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',28.0,'2006-05-26 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',24.0,'2005-08-31 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',28.0,'2005-12-29 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',28.0,'2006-01-26 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',28.0,'2006-04-29 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',30.0,'2006-03-31 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',28.0,'2006-03-17 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',32.0,'2006-03-24 00:00:00.000')
    insert @tab values('AFBJ002','方桌',60.0,'2005-06-11 00:00:00.000')
    insert @tab values('AFBJ002','方桌',25.0,'2006-05-26 00:00:00.000')
    insert @tab values('AFBJ002','方桌',55.0,'2005-08-31 00:00:00.000')
    select * from @tab  a WHERE 1>(SELECT COUNT(*) FROM @tab b WHERE a.日期<b.日期 and a.商品编码=b.商品编码)
      

  3.   

    select a.* from tbl a,(select 商品编码,品名,max(日期) as 日期 from tbl group by 商品编码, 品名) b  where a.商品编码=b.商品编码 and a.品名=b.品名 and a.日期=b.日期
      

  4.   

    select a.* from tbl a,(select 商品编码,品名,max(日期) as 日期 from tbl group by 商品编码, 品名) b where a.商品编码=b.商品编码  and a.日期=b.日期
      

  5.   

    select * from table a where 日期=(select max(日期) from tab b where a.code=b.code)
      

  6.   

    declare @tab table(商品编码 varchar(20),品名 varchar(20),采购价 decimal(10,1),日期 datetime)

    insert @tab values('AFBJ001','小方桌',28.0,'2005-06-11 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',28.0,'2006-05-26 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',24.0,'2005-08-31 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',28.0,'2005-12-29 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',28.0,'2006-01-26 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',28.0,'2006-04-29 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',30.0,'2006-03-31 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',28.0,'2006-03-17 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',32.0,'2006-03-24 00:00:00.000')
    insert @tab values('AFBJ002','方桌',60.0,'2005-06-11 00:00:00.000')
    insert @tab values('AFBJ002','方桌',25.0,'2006-05-26 00:00:00.000')
    insert @tab values('AFBJ002','方桌',55.0,'2005-08-31 00:00:00.000')
    select * from  @tab
    where 日期 in
    (
    select 日期 from 
    (
    select 商品编码,品名,max(日期) as 日期 from @tab group by 商品编码,品名
    ) as a
    )
      

  7.   

    select * from tb a,
    (select 商品编码,max(日期) as 日期 from tb group by 商品编码) b
    where a.商品编码 = b.商品编码 and a.日期 = b.日期或者select * from tb a,
    (select 品名,max(日期) as 日期 from tb group by 品名) b
    where a.品名 = b.品名 and a.日期 = b.日期
      

  8.   

    select * from tablename 
    where 日期=max(日期)
    group by 商品编码
      

  9.   

    SELECT * FROM TABLE A 
    WHERE A.日期=(SELECT TOP 1 日期 FROM TABLE WHERE A. 品名= 品名 ORDER BY 日期 DESC)
      

  10.   

    SELECT * FROM T_test A 
    WHERE A.日期=(SELECT max(日期) from T_test where A. 品名= 品名)
      

  11.   

    studenthj() ( ) 不对 在where中不能直接用max其他人的正确
      

  12.   

    select * from tb a inner join
    (select 品名,max(日期) as 日期 from tb group by 品名) b
    on
    a.品名 = b.品名 
    and 
    a.日期 = b.日期我比较喜欢这样写
      

  13.   


    select A.* from tableName A
    inner join 
    (
    select 商品编码,min(日期) 日期 from tableName group by 商品编码
    ) B
    on A.商品编码=B.商品编码 and A.日期=B.日期
      

  14.   

    select distinct 商品编码,品名,采购价,日期
    from tab 
    where 日期=(select max(日期) from tab where 品名=品名)
      

  15.   

    declare @tab table(商品编码 varchar(20),品名 varchar(20),采购价 decimal(10,1),日期 datetime)insert @tab values('AFBJ001','小方桌',28.0,'2005-06-11 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',28.0,'2006-05-26 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',24.0,'2005-08-31 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',28.0,'2005-12-29 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',28.0,'2006-01-26 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',28.0,'2006-04-29 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',30.0,'2006-03-31 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',28.0,'2006-03-17 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',32.0,'2006-03-24 00:00:00.000')
    insert @tab values('AFBJ002','方桌',60.0,'2005-06-11 00:00:00.000')
    insert @tab values('AFBJ002','方桌',25.0,'2006-05-26 00:00:00.000')
    insert @tab values('AFBJ002','方桌',55.0,'2005-08-31 00:00:00.000')select * from @tab A where not exists(
    select 1 from @tab B where B.商品编码=A.商品编码
    and B.日期>A.日期)
      

  16.   

    declare @tab table(商品编码 varchar(20),品名 varchar(20),采购价 decimal(10,1),日期 datetime)insert @tab values('AFBJ001','小方桌',28.0,'2005-06-11 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',28.0,'2006-05-26 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',24.0,'2005-08-31 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',28.0,'2005-12-29 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',28.0,'2006-01-26 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',28.0,'2006-04-29 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',30.0,'2006-03-31 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',28.0,'2006-03-17 00:00:00.000')
    insert @tab values('AFBJ001','小方桌',32.0,'2006-03-24 00:00:00.000')
    insert @tab values('AFBJ002','方桌',60.0,'2005-06-11 00:00:00.000')
    insert @tab values('AFBJ002','方桌',25.0,'2006-05-26 00:00:00.000')
    insert @tab values('AFBJ002','方桌',55.0,'2005-08-31 00:00:00.000')select * from @tab a where 日期=(select max(日期)from @tab where 商品编码=a.商品编码 and 品名=a.品名)商品编码                 品名                   采购价          日期                                                     
    -------------------- -------------------- ------------ ------------------------------------------------------ 
    AFBJ002              方桌                   25.0         2006-05-26 00:00:00.000
    AFBJ001              小方桌                  28.0         2006-05-26 00:00:00.000(所影响的行数为 2 行)
      

  17.   

    查最低的价格
    select * from @tab a where 采购价=(select min(采购价)from @tab where 商品编码=a.商品编码 and 品名=a.品名)
    商品编码                 品名                   采购价          日期                                                     
    -------------------- -------------------- ------------ ------------------------------------------------------ 
    AFBJ001              小方桌                  24.0         2005-08-31 00:00:00.000
    AFBJ002              方桌                   25.0         2006-05-26 00:00:00.000(所影响的行数为 2 行)
      

  18.   

    roy_88(论坛新星_燃烧你的激情!!) 
    的方法确实效率高,学习了!:)
      

  19.   

    select distinct 商品编码,品名,采购价,日期
    from table 
    where 日期=(select max(日期) from table);
      

  20.   

    select * from @tab a where 日期=(select max(日期)from @tab group by 品名)
    其实思路是先分类group,作为条件找max,再做为条件找*
      

  21.   

    select top 2 * from 采购表 order by submit_date desc
      

  22.   

    select * from tablename a
    where 日期=(select max(日期) from tablename b
    where a.商品编码=b.商品编码)
      

  23.   

    select top 1 with ties * from tablename order by submit_date desc
      

  24.   

    select top 1 * from tablename group by 商品编码 order by submit_date desc
    这样与上面的几个应该都可以小弟浅薄不知道这两种那个效率更高一点
    请高手指教!
      

  25.   

    select * from @tab a where 日期=(select max(日期)from @tab where 商品编码=a.商品编码)
    这种方法只对表做一次扫描,速度快!
      

  26.   

    select top 1 * from tablename group by 商品编码 order by submit_date desc这种是错误的,别的不说,看那个top 1 就知道肯定错了,因为这种只能返回1 条数据。
    select top 2 * from 采购表 order by submit_date desc  天 啊,,怎么连这么白痴的语句也写出来啊,晕。其中一种正确的写法:
    --注释:这里我引用上面的@tab为表,以商品编码、日期为表的主键
    select det.*
    from (--获取所有商品最近的一次采购日期
    select [商品编码],max([日期]) as [日期]  
    from @tab 
    group by [商品编码]
    ) lst
    inner join @tab det
    on lst.[商品编码]=det.[商品编码]
    and lst.[日期]=det.[日期]