商品编码 品名 采购价 日期
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
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
解决方案 »
- 如何根据行数触发打印
- 关于使用数据集进行模糊查询
- 【请教】无法在数据库“DB”上进行备份。该子任务被忽略??????????????
- 关于读取照片的问题
- 如何在同一表中找出有相同属性值的记录?
- 怎样得到当前数据库的所有备份文件列表和备份时间?好像是使用backupfile,backupmediafamily,backupmediaset等几个系统表
- 求一条SQL语句,如何将重复列设为空
- 高分赠送,帮我解疑有关P1=>P2概念的理解,help!!在线等待
- 如何恢复delete sql语句删除的数据(ms sql server),请帮帮我,在线等待,thanks!
- Help me!一个简单而又让人...的问题。
- 如何计算一行数据中逗号的数量
- 看不懂的存储过程,请帮忙解释一下
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.商品编码)
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
)
(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.日期
where 日期=max(日期)
group by 商品编码
WHERE A.日期=(SELECT TOP 1 日期 FROM TABLE WHERE A. 品名= 品名 ORDER BY 日期 DESC)
WHERE A.日期=(SELECT max(日期) from T_test where A. 品名= 品名)
(select 品名,max(日期) as 日期 from tb group by 品名) b
on
a.品名 = b.品名
and
a.日期 = b.日期我比较喜欢这样写
select A.* from tableName A
inner join
(
select 商品编码,min(日期) 日期 from tableName group by 商品编码
) B
on A.商品编码=B.商品编码 and A.日期=B.日期
from tab
where 日期=(select max(日期) from tab where 品名=品名)
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.日期)
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 行)
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 行)
的方法确实效率高,学习了!:)
from table
where 日期=(select max(日期) from table);
其实思路是先分类group,作为条件找max,再做为条件找*
where 日期=(select max(日期) from tablename b
where a.商品编码=b.商品编码)
这样与上面的几个应该都可以小弟浅薄不知道这两种那个效率更高一点
请高手指教!
这种方法只对表做一次扫描,速度快!
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.[日期]