У меня есть таблица 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 записей будут отображаться "не по порядку". Конец недели рекорды (сб PM) появляются в начале недели ... не в конце ... где они принадлежат.
Есть идеи, что я делаю неправильно?