现在有表:khdjb 如下:姓名 品名 购买日期
客户A 显示器 20101101
客户A 显示器 20101105
客户B 主机 20101202
客户B 主机 20101203
客户C 键盘 20101206
客户C 键盘 20101208
客户C 键盘 20101209
… … …其中:购买日期都不重复,其他两个字段可能有两个或三个重复记录,如客户A不看购买日期有两条重复记录,现在目的是要只取客户A的第一条记录,其他的客户类似。请问如何写SQL语句

解决方案 »

  1.   

    select *
    from khdjb t
    where not exists(select 1 from khdjb where 姓名=t.姓名 and 购买日期<t.购买日期)
      

  2.   


    --> 数据库版本:
    --> Microsoft SQL Server 2008 (RTM) - 10.0.1600.22
    --> 测试数据:[TB]
    IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[TB]') 
    AND type in (N'U')) 
    DROP TABLE [TB]
    GO---->建表
    create table [TB]([姓名] varchar(5),[品名] varchar(6),[购买日期] datetime)
    insert [TB]
    select '客户A','显示器','20101101' union all
    select '客户A','显示器','20101105' union all
    select '客户B','主机','20101202' union all
    select '客户B','主机','20101203' union all
    select '客户C','键盘','20101206' union all
    select '客户C','键盘','20101208' union all
    select '客户C','键盘','20101209'
    GO--> 查询结果
    SELECT * FROM [TB] T WHERE NOT EXISTS (SELECT 1 FROM TB WHERE [姓名]=T.姓名 AND  [购买日期]<T.购买日期 AND [品名]=T.品名)
    --> 删除表格
    --DROP TABLE [TB]
      

  3.   

    select * from khdjb a where not  exists(select 1 from khdjb where 姓名=a.姓名 and 品名=a.品名 and 购买日期<a.购买日期)
      

  4.   


    --支持树哥
    select *
    from khdjb t
    where not exists(select 1 from khdjb where 姓名=t.姓名 and 购买日期<t.购买日期)
      

  5.   


    select 姓名,品名,in(购买日期) from khdjb group by 姓名,品名
      

  6.   


    select 姓名,品名,min(购买日期) from khdjb group by 姓名,品名