在SQL中获取前一小时的数据

时间:2014-02-19 09:44:24

标签: sql sql-server sql-server-2008

Hai们我想用SQL中的前一小时数据。

我找到了类似的东西

DATEPART(hh,GETDATE())-1 –> 

但它有一些问题,因为我的日期格式是24小时。当时间在00.00.00-00.59.59之间时,它将给出-ve value(-1)。我应该得到23作为价值。有什么建议?这就是我所做的

DECLARE @hourlyaggregatedvolume smallint
DECLARE @hourlyaggregatedspeed smallint
DECLARE @hourlyaggregatedoccupancy float
DECLARE @hourlyaggregatedheadway float 
DECLARE @trafficdatadate datetime   
DECLARE @closeststationname nvarchar(100) = 'E100 1001'
DECLARE @accidentdate nvarchar(10) = '2014-02-17'
DECLARE @accidenttime nvarchar(10) = '01:10:00'
  SELECT 
           @hourlyaggregatedvolume = aggregated_volume,
           @hourlyaggregatedspeed  =aggregated_speed,
           @hourlyaggregatedheadway = aggregated_headway,
           @hourlyaggregatedoccupancy = aggregated_occupancy,
           @trafficdatadate = [date] 
           FROM dbo.traffic_data_aggregated_hourly    
           WHERE station = @closeststationname  
       AND CONVERT(DATE,[date]) = @accidentdate
       AND period = CASE WHEN SUBSTRING (@accidenttime,1,2) - 1 = -1 THEN 23
                    ELSE SUBSTRING (@accidenttime,1,2) - 1
                    END
       SELECT  @hourlyaggregatedvolume,@hourlyaggregatedspeed,@hourlyaggregatedheadway
       ,@hourlyaggregatedoccupancy,@trafficdatadate

2 个答案:

答案 0 :(得分:5)

首先进行日期数学,然后提取小时:

DATEPART(hour,DATEADD(hour,-1,GETDATE()))

(另外,我讨厌日期组件的“短”形式。我总是把它全部拼出来,例如hourhh,因为我发现它更具可读性,通常不是远远超过几个字符,我永远不会记得哪些是几个月与分钟相比)


参考文献:DATEADDDATEPARTGETDATE

答案 1 :(得分:1)

你可能想要这样的东西:

DECLARE @Now DATETIME = CURRENT_TIMESTAMP
DECLARE @FromTimeStamp DATETIME = DATEADD(HOUR, -1, @Now)

SELECT 
    (list of columns)
FROM
    dbo.YourTableNameHere
WHERE
    SomeDateColumn >= @FromTimeStamp

或类似的东西 - 这会从过去一小时的任何表中选择您想要的任何数据列(现在减去1小时)。

DATEADD功能将处理日期/时间数学的所有讨厌细节 - 如果你在午夜后30分钟运行,处理回到昨天晚上11:30就好了