我先建好测试数据drop table test create table test(ID int,HotelCode varchar(10),RoomType varchar(10),StartDate datetime,EndDate datetime,Price money,DayOfWeek int) insert into test select 1 ,'00001', 'Twin' ,'2009-01-01', '2009-03-01',200.00,1 insert into test select 2 ,'00001', 'Twin' ,'2009-01-01', '2009-03-01',200.00,2 insert into test select 3 ,'00001', 'Twin' ,'2009-01-01', '2009-03-01',200.00,3 insert into test select 4 ,'00001', 'Twin' ,'2009-01-01', '2009-03-01',200.00,4 insert into test select 5 ,'00001', 'Twin' ,'2009-01-01', '2009-03-01',200.00,5 insert into test select 6 ,'00001', 'Twin' ,'2009-01-01', '2009-03-01',250.00,6 insert into test select 7 ,'00001', 'Twin' ,'2009-01-01', '2009-03-01',250.00,7 insert into test select 8 ,'00001', 'Twin' ,'2009-03-04', '2009-03-06',300.00,3 insert into test select 9 ,'00001', 'Twin' ,'2009-03-04', '2009-03-06',300.00,4 insert into test select 10,'00001', 'Twin' ,'2009-03-04', '2009-03-06',300.00,5 insert into test select 11,'00001', 'Twin' ,'2009-03-07', '2009-05-06',300.00,1 insert into test select 12,'00001', 'Twin' ,'2009-03-07', '2009-05-06',300.00,2 insert into test select 13,'00001', 'Twin' ,'2009-03-07', '2009-05-06',300.00,3 insert into test select 14,'00001', 'Twin' ,'2009-03-07', '2009-05-06',300.00,4 insert into test select 15,'00001', 'Twin' ,'2009-03-07', '2009-05-06',300.00,5 insert into test select 16,'00001', 'Twin' ,'2009-03-07', '2009-05-06',350.00,6 insert into test select 17,'00001', 'Twin' ,'2009-03-07', '2009-05-06',350.00,7 insert into test select 18,'00001', 'Single','2009-01-04', '2009-03-01',100.00,1 insert into test select 19,'00001', 'Single','2009-01-04', '2009-03-01',100.00,2 insert into test select 20,'00001', 'Single','2009-01-04', '2009-03-01',100.00,3 insert into test select 21,'00001', 'Single','2009-01-04', '2009-03-01',100.00,4 insert into test select 22,'00001', 'Single','2009-01-04', '2009-03-01',100.00,5 insert into test select 23,'00001', 'Single','2009-01-04', '2009-03-01',150.00,6 insert into test select 24,'00001', 'Single','2009-01-04', '2009-03-01',150.00,7
insert into test select 25,'00001', 'Single','2009-03-02', '2009-03-05',80.00 ,1 insert into test select 26,'00001', 'Single','2009-03-02', '2009-03-05',80.00 ,2 insert into test select 27,'00001', 'Single','2009-03-02', '2009-03-05',80.00 ,3 insert into test select 28,'00001', 'Single','2009-03-02', '2009-03-05',90.00 ,4 insert into test select 29,'00001', 'Single','2009-03-06', '2009-05-03',90.00 ,1 insert into test select 30,'00001', 'Single','2009-03-06', '2009-05-03',90.00 ,2 insert into test select 31,'00001', 'Single','2009-03-06', '2009-05-03',90.00 ,3 insert into test select 32,'00001', 'Single','2009-03-06', '2009-05-03',90.00 ,4 insert into test select 33,'00001', 'Single','2009-03-06', '2009-05-03',90.00 ,5 insert into test select 34,'00001', 'Single','2009-03-06', '2009-05-03',100.00,6 insert into test select 35,'00001', 'Single','2009-03-06', '2009-05-03',100.00,7 insert into test select 36,'00002', 'Twin' ,'2009-01-01', '2009-03-01',200.00,1 insert into test select 37,'00002', 'Twin' ,'2009-01-01', '2009-03-01',200.00,2 insert into test select 38,'00002', 'Twin' ,'2009-01-01', '2009-03-01',200.00,3 insert into test select 39,'00002', 'Twin' ,'2009-01-01', '2009-03-01',200.00,4 insert into test select 40,'00002', 'Twin' ,'2009-01-01', '2009-03-01',200.00,5 insert into test select 41,'00002', 'Twin' ,'2009-01-01', '2009-03-01',200.00,6 insert into test select 42,'00002', 'Twin' ,'2009-01-01', '2009-03-01',200.00,7 insert into test select 43,'00002', 'Twin' ,'2009-03-02', '2009-04-03',300.00,1 insert into test select 43,'00002', 'Twin' ,'2009-03-02', '2009-04-03',300.00,2 insert into test select 43,'00002', 'Twin' ,'2009-03-02', '2009-04-03',300.00,3 insert into test select 43,'00002', 'Twin' ,'2009-03-02', '2009-04-03',300.00,4 insert into test select 43,'00002', 'Twin' ,'2009-03-02', '2009-04-03',300.00,5 insert into test select 43,'00002', 'Twin' ,'2009-03-02', '2009-04-03',350.00,6 insert into test select 43,'00002', 'Twin' ,'2009-03-02', '2009-04-03',350.00,7 insert into test select 44,'00002', 'Single','2009-01-04', '2009-03-01',100.00,1 insert into test select 45,'00002', 'Single','2009-01-04', '2009-03-01',100.00,2 insert into test select 46,'00002', 'Single','2009-01-04', '2009-03-01',100.00,3 insert into test select 47,'00002', 'Single','2009-01-04', '2009-03-01',100.00,4 insert into test select 48,'00002', 'Single','2009-01-04', '2009-03-01',100.00,5 insert into test select 49,'00002', 'Single','2009-01-04', '2009-03-01',160.00,6 insert into test select 50,'00002', 'Single','2009-01-04', '2009-03-01',160.00,7 insert into test select 51,'00002', 'Single','2009-03-04', '2009-04-03',150.00,1 insert into test select 52,'00002', 'Single','2009-03-04', '2009-04-03',150.00,2 insert into test select 53,'00002', 'Single','2009-03-04', '2009-04-03',150.00,3 insert into test select 54,'00002', 'Single','2009-03-04', '2009-04-03',150.00,4 insert into test select 55,'00002', 'Single','2009-03-04', '2009-04-03',150.00,5 insert into test select 56,'00002', 'Single','2009-03-04', '2009-04-03',150.00,6 insert into test select 57,' 0000', 'Single','2009-03-04', '2009-04-03',150.00,7 select * from test
select ID, HotelCode, RoomType, StratDate, EndDate, Price, row_number(partition by StratDate,order by ID)
select ID, HotelCode, RoomType, StratDate, EndDate, Price, row_number(partition by StratDate,order by ID) DayOfWeek from Tab
select * from (select *,ROW_NUMBER() over (partition by taoistong order by hotelcode ) 'taoistong2' from (select *,'1' 'taoistong' from test) a where isnull(EndDate,'2020-01-01')>='2009-03-01' and StartDate<='2009-03-06' ) a where taoistong2 between 1 and 10 --taoistong2 between 11 and 20 --taoistong2 between 21 and 30 第一个答案
select hotelcode,roomtype, where isnull(EndDate,'2020-01-01')>='2009-03-01' and StartDate<='2009-03-06'drop table #taoistong create table #taoistong (date_ smalldatetime) insert into #taoistong select '2009-03-06' union all select '2009-03-05' union all select '2009-03-04' union all select '2009-03-03' union all select '2009-03-02' union all select '2009-03-01' select * from (select case DATENAME(DW,date_) when 'Friday' then 5 when 'Thursday' then 4 when 'Wednesday' then 3 when 'Tuesday' then 2 when 'Monday' then 1 when 'Saturday' then 6 when 'Sunday' then 7 end 'week',* from #taoistong where date_ between '2009-03-01' and '2009-03-06') a,test b where a.week=b.DayOfWeek and a.date_ between b.StartDate and ISNULL(b.EndDate,'2020-01-01') order by HotelCode ,RoomType,date_第二题
create table test(ID int,HotelCode varchar(10),RoomType varchar(10),StartDate datetime,EndDate datetime,Price money,DayOfWeek int)
insert into test select 1 ,'00001', 'Twin' ,'2009-01-01', '2009-03-01',200.00,1
insert into test select 2 ,'00001', 'Twin' ,'2009-01-01', '2009-03-01',200.00,2
insert into test select 3 ,'00001', 'Twin' ,'2009-01-01', '2009-03-01',200.00,3
insert into test select 4 ,'00001', 'Twin' ,'2009-01-01', '2009-03-01',200.00,4
insert into test select 5 ,'00001', 'Twin' ,'2009-01-01', '2009-03-01',200.00,5
insert into test select 6 ,'00001', 'Twin' ,'2009-01-01', '2009-03-01',250.00,6
insert into test select 7 ,'00001', 'Twin' ,'2009-01-01', '2009-03-01',250.00,7
insert into test select 8 ,'00001', 'Twin' ,'2009-03-04', '2009-03-06',300.00,3
insert into test select 9 ,'00001', 'Twin' ,'2009-03-04', '2009-03-06',300.00,4
insert into test select 10,'00001', 'Twin' ,'2009-03-04', '2009-03-06',300.00,5
insert into test select 11,'00001', 'Twin' ,'2009-03-07', '2009-05-06',300.00,1
insert into test select 12,'00001', 'Twin' ,'2009-03-07', '2009-05-06',300.00,2
insert into test select 13,'00001', 'Twin' ,'2009-03-07', '2009-05-06',300.00,3
insert into test select 14,'00001', 'Twin' ,'2009-03-07', '2009-05-06',300.00,4
insert into test select 15,'00001', 'Twin' ,'2009-03-07', '2009-05-06',300.00,5
insert into test select 16,'00001', 'Twin' ,'2009-03-07', '2009-05-06',350.00,6
insert into test select 17,'00001', 'Twin' ,'2009-03-07', '2009-05-06',350.00,7
insert into test select 18,'00001', 'Single','2009-01-04', '2009-03-01',100.00,1
insert into test select 19,'00001', 'Single','2009-01-04', '2009-03-01',100.00,2
insert into test select 20,'00001', 'Single','2009-01-04', '2009-03-01',100.00,3
insert into test select 21,'00001', 'Single','2009-01-04', '2009-03-01',100.00,4
insert into test select 22,'00001', 'Single','2009-01-04', '2009-03-01',100.00,5
insert into test select 23,'00001', 'Single','2009-01-04', '2009-03-01',150.00,6
insert into test select 24,'00001', 'Single','2009-01-04', '2009-03-01',150.00,7
insert into test select 25,'00001', 'Single','2009-03-02', '2009-03-05',80.00 ,1
insert into test select 26,'00001', 'Single','2009-03-02', '2009-03-05',80.00 ,2
insert into test select 27,'00001', 'Single','2009-03-02', '2009-03-05',80.00 ,3
insert into test select 28,'00001', 'Single','2009-03-02', '2009-03-05',90.00 ,4
insert into test select 29,'00001', 'Single','2009-03-06', '2009-05-03',90.00 ,1
insert into test select 30,'00001', 'Single','2009-03-06', '2009-05-03',90.00 ,2
insert into test select 31,'00001', 'Single','2009-03-06', '2009-05-03',90.00 ,3
insert into test select 32,'00001', 'Single','2009-03-06', '2009-05-03',90.00 ,4
insert into test select 33,'00001', 'Single','2009-03-06', '2009-05-03',90.00 ,5
insert into test select 34,'00001', 'Single','2009-03-06', '2009-05-03',100.00,6
insert into test select 35,'00001', 'Single','2009-03-06', '2009-05-03',100.00,7
insert into test select 36,'00002', 'Twin' ,'2009-01-01', '2009-03-01',200.00,1
insert into test select 37,'00002', 'Twin' ,'2009-01-01', '2009-03-01',200.00,2
insert into test select 38,'00002', 'Twin' ,'2009-01-01', '2009-03-01',200.00,3
insert into test select 39,'00002', 'Twin' ,'2009-01-01', '2009-03-01',200.00,4
insert into test select 40,'00002', 'Twin' ,'2009-01-01', '2009-03-01',200.00,5
insert into test select 41,'00002', 'Twin' ,'2009-01-01', '2009-03-01',200.00,6
insert into test select 42,'00002', 'Twin' ,'2009-01-01', '2009-03-01',200.00,7
insert into test select 43,'00002', 'Twin' ,'2009-03-02', '2009-04-03',300.00,1
insert into test select 43,'00002', 'Twin' ,'2009-03-02', '2009-04-03',300.00,2
insert into test select 43,'00002', 'Twin' ,'2009-03-02', '2009-04-03',300.00,3
insert into test select 43,'00002', 'Twin' ,'2009-03-02', '2009-04-03',300.00,4
insert into test select 43,'00002', 'Twin' ,'2009-03-02', '2009-04-03',300.00,5
insert into test select 43,'00002', 'Twin' ,'2009-03-02', '2009-04-03',350.00,6
insert into test select 43,'00002', 'Twin' ,'2009-03-02', '2009-04-03',350.00,7
insert into test select 44,'00002', 'Single','2009-01-04', '2009-03-01',100.00,1
insert into test select 45,'00002', 'Single','2009-01-04', '2009-03-01',100.00,2
insert into test select 46,'00002', 'Single','2009-01-04', '2009-03-01',100.00,3
insert into test select 47,'00002', 'Single','2009-01-04', '2009-03-01',100.00,4
insert into test select 48,'00002', 'Single','2009-01-04', '2009-03-01',100.00,5
insert into test select 49,'00002', 'Single','2009-01-04', '2009-03-01',160.00,6
insert into test select 50,'00002', 'Single','2009-01-04', '2009-03-01',160.00,7
insert into test select 51,'00002', 'Single','2009-03-04', '2009-04-03',150.00,1
insert into test select 52,'00002', 'Single','2009-03-04', '2009-04-03',150.00,2
insert into test select 53,'00002', 'Single','2009-03-04', '2009-04-03',150.00,3
insert into test select 54,'00002', 'Single','2009-03-04', '2009-04-03',150.00,4
insert into test select 55,'00002', 'Single','2009-03-04', '2009-04-03',150.00,5
insert into test select 56,'00002', 'Single','2009-03-04', '2009-04-03',150.00,6
insert into test select 57,' 0000', 'Single','2009-03-04', '2009-04-03',150.00,7
select * from test
select ID, HotelCode, RoomType, StratDate, EndDate, Price, row_number(partition by StratDate,order by ID)
from Tab
from
(select *,ROW_NUMBER() over (partition by taoistong order by hotelcode ) 'taoistong2'
from (select *,'1' 'taoistong' from test) a
where isnull(EndDate,'2020-01-01')>='2009-03-01' and StartDate<='2009-03-06'
) a
where
taoistong2 between 1 and 10
--taoistong2 between 11 and 20
--taoistong2 between 21 and 30
第一个答案
1)要求查询时间段 (2009-03-01--2009-03-06)内存在价格的酒店及其房型,只要时间段的两个端点有一个在StartTime和EndTime之间,就满足这个条件;至于后面那个分页的条件,我想找出了数据后就简单了
2) 第二个要求没有思路,不过已经找出了满足条件的记录,再做这个应该也不会太难!!
select hotelcode,roomtype,
where isnull(EndDate,'2020-01-01')>='2009-03-01' and StartDate<='2009-03-06'drop table #taoistong
create table #taoistong (date_ smalldatetime)
insert into #taoistong
select '2009-03-06' union all
select '2009-03-05' union all
select '2009-03-04' union all
select '2009-03-03' union all
select '2009-03-02' union all
select '2009-03-01'
select * from
(select case DATENAME(DW,date_) when 'Friday' then 5 when 'Thursday' then 4 when 'Wednesday' then 3 when 'Tuesday' then 2
when 'Monday' then 1 when 'Saturday' then 6 when 'Sunday' then 7 end 'week',*
from #taoistong where date_ between '2009-03-01' and '2009-03-06') a,test b
where a.week=b.DayOfWeek
and a.date_ between b.StartDate and ISNULL(b.EndDate,'2020-01-01')
order by HotelCode ,RoomType,date_第二题