我的数据库设计的是以3个字段为主键的 分别是 原材料名,日期,公司名称 我想按 原材料,公司名称分组,日期 这个顺序分组 分组后的结果取 同一个原材料组下的不同公司的最后一个日期,请问一下这个SQL语句改怎么写呢?
例如:
原材料名 公司名 日期
AAAA aaa 2009-11-1
AAAA aaa 2009-11-2
AAAA bbb 2009-11-12
AAAA bbb 2009-11-10所要结果为:AAA aaa 2009-11-2
AAA bbb 2009-11-12
例如:
原材料名 公司名 日期
AAAA aaa 2009-11-1
AAAA aaa 2009-11-2
AAAA bbb 2009-11-12
AAAA bbb 2009-11-10所要结果为:AAA aaa 2009-11-2
AAA bbb 2009-11-12
-- Author: T.O.P
-- Create date: 2009/11/25
-- Version: SQL SERVER 2005
-- =============================================
declare @TB table([原材料名] varchar(4),[公司名] varchar(3),[日期] datetime)
insert @TB
select 'AAAA','aaa','2009-11-1' union all
select 'AAAA','aaa','2009-11-2' union all
select 'AAAA','bbb','2009-11-12' union all
select 'AAAA','bbb','2009-11-10'select *
from @TB t
where not exists(select 1 from @tb where t.[原材料名] = [原材料名] and t.[公司名] = [公司名] and t.[日期]<[日期])
--测试结果:
/*
原材料名 公司名 日期
---- ---- -----------------------
AAAA aaa 2009-11-02 00:00:00.000
AAAA bbb 2009-11-12 00:00:00.000(2 row(s) affected)*/
where not exists(select 1 from tb where 原材料名 =t.原材料名 and 公司名=t.公司名
and 日期>t.日期)
select * from 表 a where 日期= (select max(日期) from 表 where 原材料名=a.原材料名 )
那个1代表什么意思?我有点不太明白