2014-02-19 917 views
0

海傢伙我想在SQL中取得前一小時的數據。以SQL小時數據取前一小時的數據

我發現這樣的事情

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

但它也有一些問題,因爲我的日期格式爲24小時。當時間在00.00.00-00.59.59之間時,它將給出-ve值(-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 
+0

請發表表格結構。 –

+0

你爲什麼不使用datediff提供lil樣本data.it不清楚。 – KumarHarsh

回答

5

待辦事項日期數學第一,然後提取時間:

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

(另外,我最討厭的日期部件的「短」的形式我總是寧願拼它完全如hourhh,因爲我覺得它更具可讀性,它通常不超過幾個字符更加多了,我永遠記得哪些是幾個月VS分鐘)


個參考文獻:DATEADDDATEPARTGETDATE

+0

抱歉,我無法得到此內容?你可以添加任何示例嗎? – bibinmatthew

+1

@bibinmatthew - 我不確定你在找什麼。我的代碼與您現有的代碼類似,只不過它首先從'GETDATE()'中減去一小時,然後* *它要求輸入「小時」部分。如果'GETDATE()'返回範圍爲'00.00.00-00.59.59'的值,那麼'DATEADD'首先將它改變爲前一天的'23.00.00-23.59.59',然後' DATEPART()'會提取你想要的正確小時分量。 –

+1

@bibinmatthew - 如果你想要更多,也就是說這是一個更大的查詢的一部分,那麼請編輯你的問題,並添加一些示例數據,預期的結果等。你不會得到一個測試的查詢關閉沒有信息的背面。 –

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就好了。