27,580
社区成员
发帖
与我相关
我的任务
分享
select y , number, (select SUM(number) from test where y between m.y-10 and m.y-1) s
from test m
改成 between m.y-10 and m.y-1就可以了吧;
10w数据2s查出来,效率可以接收,谢谢指教!
btw,因为项目需要用的是SQLServer,标量子查询就、、
select y , number, (select SUM(number) from test where y between m.y-10 and m.y-1) s
from test m
改成 between m.y-10 and m.y-1就可以了吧;
10w数据2s查出来,效率可以接收,谢谢指教!
btw,因为项目需要用的是SQLServer,标量子查询就、、
create table test (y int , number int)
go
-- create index ix_text on test(y)
go
insert into test(y,number)
select top 100000 ROW_NUMBER() over(order by getdate()), a.id % 100
from syscolumns a, syscolumns b, syscolumns
go
-- 标量子查询,换了个写法 , 10W 条记录,大概 2s 出结果 。
select y , number, (select SUM(number) from test where y between m.y-2 and m.y-1) s
from test m
go
drop table test
go
-- 输出结果太多了,我就不帖了。
create table test (y int , number int)
go
insert into test(y,number) values
(2003, 884 ),
(2004, 1070),
(2005, 1297),
(2006, 1674),
(2007, 1936),
(2008, 2066),
(2009, 2432)
go
select * from test
go
-- 第一个问题
select MIN(y) , SUM(number) from test
group by (y + 1) / 2
go
-- 第二个问题
select y , number, (select SUM(number) from test where y = m.y-1 or y=m.y-2) s
from test m
go
drop table test
go
(7 行受影响)
y number
----------- -----------
2003 884
2004 1070
2005 1297
2006 1674
2007 1936
2008 2066
2009 2432
(7 行受影响)
----------- -----------
2003 1954
2005 2971
2007 4002
2009 2432
(4 行受影响)
y number s
----------- ----------- -----------
2003 884 NULL
2004 1070 884
2005 1297 1954
2006 1674 2367
2007 1936 2971
2008 2066 3610
2009 2432 4002
(7 行受影响)