2012-04-18 66 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