2012-04-18 65 views
0

我正在使用microsoft sql server。我正在努力按全職時間對結果進行排序。按小時排序時顯示完整日期時間

我的原始數據看起來像這樣:

TimeStamp       TotalOffered 
2012-04-16 08:00:00     18 
2012-04-16 08:30:00     34 
2012-04-16 09:00:00     30 
2012-04-16 09:30:00     68 

我被小時塊數據的例子總和期間8點00分00秒分選是52,爲9時○○分00秒的數據的總和是98,我已經把它細分了一天。

的代碼,我是:

select datepart(hour,[TimeStamp]), SUM([TotalOffered]) 
from [my table] 
group by 
datepart(hour,[sus_CallPerformance_TimeStamp]), 
dateadd(d, 0, datediff(d, 0, [sus_CallPerformance_TimeStamp])) 

我試圖讓數據充分展現時間戳,而不是僅僅一小時。

目前的結果顯示爲:

8 52 
9 98 

我想結果顯示爲:

2012-04-16 08:00:00 52 
2012-04-16 09:00:00 98 

謝謝

+1

目前尚不清楚你的要求,你可以展示你的預期效果? – Taryn 2012-04-18 12:49:24

+0

您是按小時還是按小時排序?現在你只是按小時分組。 – norlando 2012-04-18 12:58:11

回答

2
SELECT DATEADD(HOUR, DATEPART(HOUR, TimeStamp), DATEDIFF(DAY, 0, TimeStamp)) [TimeStamp], 
     SUM(TotalOffered) [TotalOffered] 
FROM [My Table] 
GROUP BY DATEADD(HOUR, DATEPART(HOUR, TimeStamp), DATEDIFF(DAY, 0, TimeStamp)) 
ORDER BY [TimeStamp] 
+0

工作完美,謝謝! – Brad 2012-04-18 13:02:49

-1

試試這個:

declare @t table (ts datetime, od int) 
insert into @t (ts, od) values ('2012-04-16 08:00:00', 18) 
insert into @t (ts, od) values ('2012-04-16 08:30:00', 34) 
insert into @t (ts, od) values ('2012-04-16 09:00:00', 30) 
insert into @t (ts, od) values ('2012-04-16 09:30:00', 68) 

select * from @t 


select 
    dateadd(hour, datepart(hour, ts), cast(floor(cast(ts as real)) as datetime)) as solution, 
    sum(od) 
    from @t 
    group by dateadd(hour, datepart(hour, ts), cast(floor(cast(ts as real)) as datetime)) 
    order by dateadd(hour, datepart(hour, ts), cast(floor(cast(ts as real)) as datetime)) 
+2

你的'ORDER BY'子句在哪裏?如果沒有'ORDER BY',你認爲你的排序是可以預測的嗎? – 2012-04-18 13:31:48

+0

你只需要,如果你想有最終的結果(如8,9,10點等)如果這並不重要,所以你很好,像7,10,9,8,那麼它絕對沒問題,組合就是這麼做的。 – 2012-04-18 13:50:45

+2

我認爲標題中的「按小時排序」很清楚,按7,10,9,8排序並不合理。 – 2012-04-18 13:52:30

-1

DateTime字段可以轉換爲浮點值,其中整數代表日期,分數表示時間。如果通過24 multipy日期,那麼整個數字將代表小時,具體如下:

SELECT CAST(FLOOR(CAST(TimeStamp AS FLOAT) * 24)/24.0 AS DateTime) AS Hr, SUM(TotalOffered) AS Total 
FROM [my table] 
GROUP BY FLOOR(CAST(TimeStamp AS FLOAT) * 24) 
ORDER BY FLOOR(CAST(TimeStamp AS FLOAT) * 24) 
+2

我不知道這是如何幫助排序時,沒有'ORDER BY'子句。 – 2012-04-18 13:32:11

+1

DateTime字段是** NOT **作爲浮點值在內部存儲在SQL Server中。 [它們存儲爲兩個4字節整數](http://msdn.microsoft.com/zh-cn/library/ms187819%28v=sql.90%29.aspx) – GarethD 2012-04-18 15:51:05

+0

我已添加order by子句,並將其刪除意味着DateTime字段被存儲爲float。鑑於這個代碼的工作原理,並有效地工作,也許反對票有點苛刻? – Peter 2012-04-19 13:04:48