现在有表:khdjb 如下:姓名 品名 购买日期
客户A 显示器 20101101
客户A 显示器 20101105
客户B 主机 20101202
客户B 主机 20101203
客户C 键盘 20101206
客户C 键盘 20101208
客户C 键盘 20101209
… … …其中:购买日期都不重复,其他两个字段可能有两个或三个重复记录,如客户A不看购买日期有两条重复记录,现在目的是要只取客户A的第一条记录,其他的客户类似。请问如何写SQL语句
客户A 显示器 20101101
客户A 显示器 20101105
客户B 主机 20101202
客户B 主机 20101203
客户C 键盘 20101206
客户C 键盘 20101208
客户C 键盘 20101209
… … …其中:购买日期都不重复,其他两个字段可能有两个或三个重复记录,如客户A不看购买日期有两条重复记录,现在目的是要只取客户A的第一条记录,其他的客户类似。请问如何写SQL语句
from khdjb t
where not exists(select 1 from khdjb where 姓名=t.姓名 and 购买日期<t.购买日期)
--> 数据库版本:
--> 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]
--支持树哥
select *
from khdjb t
where not exists(select 1 from khdjb where 姓名=t.姓名 and 购买日期<t.购买日期)
select 姓名,品名,in(购买日期) from khdjb group by 姓名,品名
select 姓名,品名,min(购买日期) from khdjb group by 姓名,品名