按星期和小时对SQL进行排序/分组

按星期和小时对SQL进行排序/分组,sql,sql-server,group-by,sql-order-by,utc,Sql,Sql Server,Group By,Sql Order By,Utc,我有一个SQL Server 2005表,其中包含带有UTC/GMT日期字段的记录。 我需要将记录按“一周中的哪一天”和“一天中的哪一小时”进行分组和排序。给出7*24=168组。输出如下所示: Sun 12am Sun 1am Sun 2am .... etc Mon 12am Mon 1am .... etc .... etc Sat 10pm Sat 11pm 在我尝试将事物转换为本地时区之前,一切正常。 在SQL内部执行转换: SELECT MIN(Key),MIN(SavedO

我有一个SQL Server 2005表,其中包含带有UTC/GMT日期字段的记录。 我需要将记录按“一周中的哪一天”和“一天中的哪一小时”进行分组和排序。给出7*24=168组。输出如下所示:

Sun 12am
Sun  1am
Sun  2am
.... etc
Mon 12am
Mon  1am
.... etc
.... etc
Sat 10pm
Sat 11pm
在我尝试将事物转换为本地时区之前,一切正常。 在SQL内部执行转换:

SELECT MIN(Key),MIN(SavedOn), 
FROM MyTable 
GROUP BY (DatePart(WEEKDAY, SavedOn)*24.0) + DatePart(HOUR, SavedOn) - (5.0/24.0)
ORDER BY (DatePart(WEEKDAY, SavedOn)*24.0) + DatePart(HOUR, SavedOn) - (5.0/24.0)
或者在UTC中对记录进行排序/获取后,用我自己的代码进行转换:

SELECT MIN(Key),MIN(SavedOn), 
FROM MyTable 
GROUP BY (DatePart(WEEKDAY, SavedOn)*24.0) + DatePart(HOUR, SavedOn)  
ORDER BY (DatePart(WEEKDAY, SavedOn)*24.0) + DatePart(HOUR, SavedOn) 

(my own math here)
不管怎样。。。5条记录将显示“无序”。周末记录(周六下午) 在本周初出现。。。不是结局。。。他们属于哪里


知道我做错了什么吗?

浮点数学不精确。乘以
24.0
会导致边界错误

而不是把数字加起来

GROUP BY (DatePart(WEEKDAY, SavedOn)*24.0) + DatePart(HOUR, SavedOn)  
改为按两个字段排序:

GROUP BY DatePart(WEEKDAY, SavedOn), DatePart(HOUR, SavedOn) 

这就是我要做的。我不确定我是否完全理解您的尝试:

SELECT DatePart(WEEKDAY, SavedOn), DatePart(HOUR, SavedOn) , min(key)
FROM MyTable 
GROUP BY DatePart(WEEKDAY, SavedOn), DatePart(HOUR, SavedOn)
ORDER BY 1, 2
如果您的转换方法只是增加5个小时,那么每次看到
SavedOn
,都要这样做:

SELECT DatePart(WEEKDAY, SavedOn+5.0/24.0), DatePart(HOUR, SavedOn+5.0/24.0) , min(key)
FROM MyTable 
GROUP BY DatePart(WEEKDAY, SavedOn+5.0/24.0, DatePart(HOUR, SavedOn+5.0/24.0)
ORDER BY 1, 2

但现在是乘法造成了误差,是吗?我以为这是转换到东部时间,或者其他时间,OP正在做的事情。没有?如果是这样的话,我的“订购依据”行是什么?我非常乐意修复我原来的帖子。哪一部分不清楚?我试过你的解决方案。。。它仍然返回一些“Sat PM”组。。。然后之后。。。返回“Sun AM”。我需要他们在我的列表中显示的排序。。。太阳。。。周一。。。星期二。。。等不坐。。太阳。。。周一。。。etc@Carol-即使到处都添加了5/24?我想我以前做过这件事,而且很有效。你能确认以上是你尝试过的吗?