【发布时间】:2011-10-31 15:01:17
【问题描述】:
我有一个 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 条记录都会出现“乱序”。周末记录(周六下午) 出现在一周的开始......而不是结束......他们所属的地方。
知道我做错了什么吗?
【问题讨论】:
标签: sql sql-server group-by sql-order-by utc