请高手帮写一条SQL语句或存储过程.该怎么解决
请高手帮写一条SQL语句或存储过程.
假设有以下结构的表A:
id date times
10 2009-01-01 3
11 2009-01-02 1
12 2009-01-03 3
13 2009-01-04 3
14 2009-01-05 2
15 2009-01-06 0
16 2009-01-07 0
17 2009-01-08 0
18 2009-01-09 0
19 2009-01-10 0
20 2009-01-05 6
21 2009-01-06 0
22 2009-01-07 0
23 2009-01-08 1
24 2009-01-09 3
25 2009-01-10 3
26 2009-01-09 0
27 2009-01-09 0
如何根据一个区间统计出跟它一样的区间?
比如以上的A表中,2009-01-02,2009-01-03,2009-01-04三天时间内,times分别为1,3,3,该如何写一条SQL语句或
存储过程找出2009-01-08 - 2009-01-10这个区间呢?因为他的times也分别为1,3,3.
当然了,数据量比较大的,希望高手帮写一个效率较高的存储过程或SQL语句.谢谢了.
------解决方案--------------------
没明白你说啥
------解决方案--------------------
你那些日期很多重复的,这个才麻烦。
------解决方案--------------------
假设有以下结构的表A:
id date times
10 2009-01-01 3
11 2009-01-02 1
12 2009-01-03 3
13 2009-01-04 3
14 2009-01-05 2
15 2009-01-06 0
16 2009-01-07 0
17 2009-01-08 0
18 2009-01-09 0
19 2009-01-10 0
20 2009-01-05 6
21 2009-01-06 0
22 2009-01-07 0
23 2009-01-08 1
24 2009-01-09 3
25 2009-01-10 3
26 2009-01-09 0
27 2009-01-09 0
如何根据一个区间统计出跟它一样的区间?
比如以上的A表中,2009-01-02,2009-01-03,2009-01-04三天时间内,times分别为1,3,3,该如何写一条SQL语句或
存储过程找出2009-01-08 - 2009-01-10这个区间呢?因为他的times也分别为1,3,3.
当然了,数据量比较大的,希望高手帮写一个效率较高的存储过程或SQL语句.谢谢了.
------解决方案--------------------
没明白你说啥
------解决方案--------------------
你那些日期很多重复的,这个才麻烦。
------解决方案--------------------
- SQL code
declare @t table(id int,date datetime,times int) insert @t select 10,'2009-01-01',3 insert @t select 11,'2009-01-02',1 insert @t select 12,'2009-01-03',3 insert @t select 13,'2009-01-04',3 insert @t select 14,'2009-01-05',2 insert @t select 15,'2009-01-06',0 insert @t select 16,'2009-01-07',0 insert @t select 17,'2009-01-08',1 insert @t select 18,'2009-01-09',0 insert @t select 19,'2009-01-10',0 insert @t select 20,'2009-01-11',2 insert @t select 21,'2009-01-12',0 insert @t select 22,'2009-01-13',0 insert @t select 23,'2009-01-14',1 insert @t select 24,'2009-01-15',3 insert @t select 25,'2009-01-16',3 insert @t select 26,'2009-01-18',0 insert @t select 27,'2009-01-19',0 declare @begdate datetime,@enddate datetime select @begdate='2009-01-02', @enddate='2009-01-04' select * from ( select * from @t a where not exists(select 1 from @t where id=a.id and id not in(select id from @t where date between @begdate and @enddate)) ) t where exists(select 1 from @t where id=t.id and date between @begdate and @enddate) id date times ----------- ----------------------- ----------- 11 2009-01-02 00:00:00.000 1 12 2009-01-03 00:00:00.000 3 13 2009-01-04 00:00:00.000 3 (3 行受影响)
------解决方案--------------------
- SQL code
if object_id ('A') is not null drop table A if OBJECT_ID('pro_c') is not null drop procedure pro_c go create table A (id int,[date] datetime ,times int) insert into A select 10,'2009-01-01',3 union all select 11,'2009-01-02',1 union all select 12,'2009-01-03',3 union all select 13,'2009-01-04',3 union all select 14,'2009-01-05',2 union all select 15,'2009-01-06',0 union all select 16,'2009-01-07',0 union all select 17,'2009-01-08',0 union all select 18,'2009-01-09',0 union all select 19,'2009-01-10',0 union all select 20,'2009-01-05',6 union all select 21,'2009-01-06',0 union all select 22,'2009-01-07',0 union all select 23,'2009-01-08',1 union all select 24,'2009-01-09',3 union all select 25,'2009-01-10',3 union all select 26,'2009-01-09',0 union all select 27,'2009-01-09',0 go create procedure pro_c (@da1 datetime,@da2 datetime) as set nocount on select * from A where times in (select times from A WHERE [DATE] in ('2009-01-02','2009-01-03','2009-01-04')) and [date] between @da1 and @da2 set nocount off go exec pro_c '2009-01-08','2009-01-10' (18 行受影响) id date times ----------- ----------------------- ----------- 23 2009-01-08 00:00:00.000 1 24 2009-01-09 00:00:00.000 3 25 2009-01-10 00:00:00.000 3