У меня есть таблица SQL Server 2005, которая содержит записи с полем даты UTC / GMT.
Мне нужно, чтобы записи GROUPed BY и ORDERed были «день недели» и «час дня». Даёт 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)
появляются в начале недели ... не в конце ... где они принадлежат.
Есть идеи, что я делаю не так?