日期:2014-05-18  浏览次数:20460 次

求一个SQL语句, 不知道该怎么写
假设有如下两个表,表一是销售记录, 表二是所有商品

表一:
商品名称 购买数量 购买时间
--------------------------
麻花 10 2006-07-21 00:00:00
棉花糖 1 2007-01-21 00:00:00
小花片 2 2007-02-21 00:00:00
白菜 21 2007-03-21 00:00:00
麻花 20 2007-04-21 00:00:00
棉花糖 18 2007-05-21 00:00:00
小花片 23 2007-06-21 00:00:00
白菜 29 2007-07-21 00:00:00
麻花 102 2007-08-21 00:00:00
棉花糖 13 2007-09-21 00:00:00
小花片 29 2007-10-21 00:00:00
白菜 45 2007-11-21 00:00:00

表二:
商品名称 最近365天销售数量
-------------------------
麻花 122
棉花糖 24
小花片 54
白菜 95

我要怎么做才能从表一中查出今天往前推365天(也就是最近一年)的销售量并更新表二?

本来我是想靠编程, 根据表二一条一条查询表一再来更新, 可是这样效率太低了.
请高人指教~谢谢各位达人...


------解决方案--------------------
SQL code

select * into #temp from (select 商品名称,sum(购买数量)总数量 from  表一 where 
datediff(dd,b.购买时间,getdate())<=365 group by 商品名称)a

update 表二 set 最近365天销售数量=b.总数量 from 表二 a,#temp b
where a.商品名称=b.商品名称

------解决方案--------------------
SQL code
update 表二
set 最近365天销售数量 = n.购买数量
from 表二 m , (select 商品名称 , 购买数量 = sum(购买数量) from 表一 where datediff(day , 购买时间 , getdate()) <= 365 group by 商品名称) n
where m.商品名称 = n.商品名称

------解决方案--------------------
SQL code

--不用临时表
update 表二 set 最近365天销售数量=(select sum(购买数量) from 表一 where 商品名称=b.商品名称 and 购买时间>=dateadd(day,-365,getdate()) and 购买时间<getdate())
from 表二 a

------解决方案--------------------
update 表二
set 最近365天销售数量 = n.购买数量
from 表二 m , (select 商品名称 , 购买数量 = sum(购买数量) from 表一 where datediff(day , 购买时间 , getdate()) <= 365 group by 商品名称) n
where m.商品名称 = n.商品名称