T-SQL:如何在该范围内的特定时间段内工作一段时间

时间:2014-01-29 19:06:37

标签: sql

我知道我的标题不是很有用,但让我解释一下我想要做什么。 这是我在Oracle服务器上运行的SQL查询:

select 
    median(to_number(TRU.TS_OBJECT.XE2ETIME)) as E2E,
    median(to_number(TRU.TS_OBJECT.XPROCESSTIME)) as Serveur,
    count(to_number(TRU.TS_OBJECT.XE2ETIME)) as hits,
    TRU.TS_OBJECT.CSURISTEM
from 
    tru.ts_object
where
    (TRU.TS_OBJECT.XSTARTTIME >= to_date('2014/01/08 05:30','yyyy/mm/dd HH24:MI') and TRU.TS_OBJECT.XSTARTTIME < to_date('2014/01/08 21:00','yyyy/mm/dd HH24:MI'))
    and TRU.TS_OBJECT.CSMETHOD = 'POST'
    and TRU.TS_OBJECT.SCSTATUS = '200'
Group by 
  TRU.TS_OBJECT.CSURISTEM

通过此查询,我可以找到我们向客户公开的Web服务的某些性能指标的中位数。所以这给了我在上午5点30分到下午21点之间的特定时间段,这一天的中位数(2014/01/08)。

现在尝试做的是产生相同的输出但是在更长的时间内,比如说2014/01/01到2014/01/29,但总是在每天5h30到21h00之间的数据。现在我是通过改变日期范围来手动完成的,但是应该采用一种“更聪明”的方式来选择某种类型!?!?!

1 个答案:

答案 0 :(得分:0)

有两种方法可以做到:

  1. 就像你手动做的那样 - 编写一个运行查询的循环,每次迭代都会在你的日期添加1天(不知道Oracle数据库有多少,在MSSQL中就像这样:DATEADD(day,45,OrderDate)),插入每个迭代结果到表。
  2. 在WHERE中,在日期范围内,在小时内写入2条件(就像之前一样,在MSSQL中,它就像这样datepart(hh, date)
  3. 我认为在Oracle中执行选项2的方法是这样的:

    where
    (TRU.TS_OBJECT.XSTARTTIME >= to_date('2014/01/01 00:00','yyyy/mm/dd HH24:MI') 
      and TRU.TS_OBJECT.XSTARTTIME < to_date('2014/01/30 00:00','yyyy/mm/dd HH24:MI'))
    and
    (EXTRACT (HOUR FROM TRU.TS_OBJECT.XSTARTTIME) >5 
        and EXTRACT (HOUR FROM TRU.TS_OBJECT.XSTARTTIME) < 21 )