数据库中有以下重复记录:
仓库                   材料编号 规格             名称           价格 日期
BF004                60302061 76 x 94x 82.5 3寸加壓紙管 15.12 2011-3-5
BF004                60302061 76 x 94x 82.5 3寸加壓紙管 14.85 2011-3-4
BF004                60302061 76 x 94x 82.5 3寸加壓紙管 15.12 2011-3-4
bf004                60302060 76 x 94x81.5 3寸加壓紙管 14.67 2011-2-26
bf004                60302060 76 x 94x81.5 3寸加壓紙管 14.67 2011-3-17我想得到以下结果:仓库                   材料编号 规格             名称           价格 日期
BF004                60302061 76 x 94x 82.5 3寸加壓紙管 15.12 2011-3-5
bf004                60302060 76 x 94x81.5 3寸加壓紙管 14.67 2011-3-17
也就是日期最近的那一笔记录,要如何写SQL,谢谢

解决方案 »

  1.   

    select * from tb a
     where 日期=(select max(日期) from tb where 材料编号=a.材料编号)
      

  2.   

    select * from tab a
    where not exists (
       select 1
    from tab
    where 仓库=a.仓库 and  材料编号= a.材料编号 and 规格 = a.规格 and 名称=a.名称
    and 名称> a.名称
    )
      

  3.   


    select 仓库, 材料编号, 规格, 名称, 价格, max(日期) from tb
    group by 仓库 材料编号 规格 名称 价格
      

  4.   

    3楼的回答不错,但是有个问题,价格字段不是相同的,聚集起来不会得到楼主想要的结果,改为select 仓库, 材料编号, 规格, 名称, max(价格), max(日期) from tb
    group by 仓库 材料编号 规格 名称测试SQLSET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[test](
    [ck] [nchar](100) COLLATE Chinese_PRC_90_CI_AI NULL,
    [bh] [nchar](100) COLLATE Chinese_PRC_90_CI_AI NULL,
    [gg] [nchar](100) COLLATE Chinese_PRC_90_CI_AI NULL,
    [mc] [nchar](100) COLLATE Chinese_PRC_90_CI_AI NULL,
    [jg] [nchar](100) COLLATE Chinese_PRC_90_CI_AI NULL,
    [rq] [nchar](100) COLLATE Chinese_PRC_90_CI_AI NULL
    ) ON [PRIMARY]insert into test 
    select 'BF004', '60302061', '76 x 94x', '82.5 3寸加壓紙管', '15.12', '2011-3-5'
    go
    insert into test 
    select 'BF004', '60302061', '76 x 94x', '82.5 3寸加壓紙管', '14.85', '2011-3-4'
    go
    insert into test 
    select 'bf004', '60302061', '76 x 94x', '82.5 3寸加壓紙管', '15.12', '2011-3-4'
    go
    insert into test 
    select 'bf004', '60302060', '76 x 94x', '81.5 3寸加壓紙管', '14.67', '2011-2-26'
    go
    insert into test 
    select 'bf004', '60302060', '76 x 94x', '81.5 3寸加壓紙管', '14.67', '2011-3-17'
    goselect ck,bh,gg,mc,max(jg),max(rq)
    from test 
    group by ck,bh,gg,mc应该没问题,但是价格字段的逻辑需要确认是不是求最大的。