banxitan

          統(tǒng)計

          留言簿(2)

          閱讀排行榜

          評論排行榜

          產品時間段(StartDate,EndDate)SQL查詢

          表 a 字段,id,開始時間,結束時間,價格
          1,2008-01-01,2008-09-10,220.0
          2,2008-09-11,2008-09-30,280.0
          3,2008-10-01,2008-10-10,320.0
          3,2008-10-11,2008-12-31,350.0

          輸入一個開始時間,一個結束時間,返回這段時間內每天的價格,最好返回每天的日期和對應的價格
          例輸入開始時間2008-09-09,結束時間2008-09-13
          返回
          2008-09-09,220
          2008-09-10,220
          2008-09-11,280
          2008-09-12,280
          2008-09-13,280

          方案一:采用存儲過程的方案!
          create table T([id] int,[開始時間] datetime,[結束時間] datetime,[價格] numeric(4,1))
          insert into T
          select 1,'2008-01-01','2008-09-10',220.0 union all
          select 2,'2008-09-11','2008-09-30',280.0 union all
          select 3,'2008-10-01','2008-10-10',320.0 union all
          select 3,'2008-10-13','2008-12-31',350.0

          select * from T
          go
          --Code
          create procedure GetTimePrice(@begintime datetime,@endtime datetime)
          as
          declare @tmptime datetime
          declare @tmp table (dt datetime,price numeric(4,1))--結果表
          begin
          set @tmptime=@begintime
          while @tmptime<=@endtime
          begin

          insert into @tmp
          select @tmptime,價格  from t where @tmptime between 開始時間 and 結束時間
          set @tmptime=DATEADD(dd,1,@tmptime)
          end
          select * from @tmp
          end
          go

          exec GetTimePrice '2008-09-09','2008-09-14'--執(zhí)行
          --
          Drop
          drop table T
          drop procedure GetTimePrice


          方案二:采用Case方案
          set nocount on
          create table T([id] int,[開始時間] datetime,[結束時間] datetime,[價格] numeric(4,1))
          insert into T
          select 1,'2008-01-01','2008-09-10',220.0 union all
          select 2,'2008-09-11','2008-09-30',280.0 union all
          select 3,'2008-10-01','2008-10-10',320.0 union all
          select 3,'2008-10-11','2008-12-31',350.0

          declare @bgnTime datetime set @bgnTime = '2008-09-09'
          declare @endTime datetime set @endTime = '2008-09-13'
          select id
              ,
          case when [開始時間]<@bgnTime then @bgnTime else [開始時間] end as [開始時間] -- 讓輸出結果更貼近參數(shù)表現(xiàn)出來
              ,case when [結束時間]>@endTime then @endTime else [結束時間] end as [結束時間] -- 讓輸出結果更貼近參數(shù)表現(xiàn)出來
              ,[價格]
          from T
          where [開始時間]<@endTime
          and [結束時間]>@bgnTime
          -- id,開始時間,結束時間
          --
           1,2008-09-09 00:00:00.000,2008-09-10 00:00:00.000
          --
           2,2008-09-11 00:00:00.000,2008-09-13 00:00:00.000

          drop table T

          id          開始時間                                                   結束時間                                                   價格     
          ----------- ------------------------------------------------------ ------------------------------------------------------ ------ 
          1           2008-09-09 00:00:00.000                                2008-09-10 00:00:00.000                                220.0
          2           2008-09-11 00:00:00.000                                2008-09-13 00:00:00.000                                280.0

          posted on 2009-04-23 20:50 MikyTan 閱讀(799) 評論(0)  編輯  收藏 所屬分類: SQL

          主站蜘蛛池模板: 京山县| 扬州市| 永德县| 乌拉特中旗| 邛崃市| 车险| 伽师县| 潼关县| 乌什县| 高阳县| 新巴尔虎右旗| 克东县| 哈尔滨市| 福建省| 都昌县| 松阳县| 玉山县| 常州市| 门头沟区| 榆中县| 惠水县| 新乡县| 溧阳市| 察隅县| 桂林市| 崇礼县| 横山县| 庆元县| 易门县| 正镶白旗| 田林县| 广平县| 云梦县| 财经| 繁峙县| 华容县| 大渡口区| 广平县| 延庆县| 寻甸| 柳林县|