SQL - лучший способ GroupByDay с 6 утра до 6 утра - PullRequest
1 голос
/ 20 августа 2010

Мне нужно запросить большое количество строк (содержащих столбец метки времени) и агрегировать результаты по дням.Хитрость заключается в том, что мне нужно, чтобы агрегатные функции группировались для каждого дня с 6 утра до следующего дня в 6 часов утра, а не с полуночи до полуночи.

Очевидно, что я могу сделать какую-то «группу» по DATEPART (день, отметка времени-6 часов) "но для миллионов строк это, кажется, добавляет немного работы серверу.На самом деле, это замедлит запрос с пары секунд до более чем 2 минут и в конечном итоге приведет к тайм-ауту.

Какой лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 20 августа 2010

T-SQL ниже будет делать то, что вы хотите в SQL Server.Тем не менее, производительность не будет высокой на большом количестве строк, так как индекс не может быть использован из-за функций, обертывающих столбец dt.Из соображений производительности вы можете рассмотреть возможность добавления в таблицу нового вычисляемого столбца для хранения даты со смещением времени (-6 часов).Затем этот новый столбец можно проиндексировать, и производительность должна быть в порядке.

, если существует (выберите * из sys.objects, ГДЕ object_id = object_id (N'dbo.t ') И введите (N'U'))удалить таблицу dbo.t

создать таблицу dbo.t (дата и время не равны нулю)

вставить в значения dbo.t ('20100819 05:00')вставить в значения dbo.t ('20100819 07:00')вставить в значения dbo.t ('20100819 23:00')вставить в значения dbo.t ('20100820 04:00')вставить в значения dbo.t ('20100820 11:00')вставить в значения dbo.t ('20100820 13:00')вставить в значения dbo.t ('20100821 00:45')

выберите конвертировать (дата, дата и время (ЧЧ, -6, дт)) как [Дата],COUNT (dt) как [Количество]с dbo.tсгруппировать по конвертировать (дата, датадд (чч, -6, дт))

1 голос
/ 20 августа 2010

Разве вы не можете использовать ЗОНУ ВРЕМЕНИ для смены полуночи без дорогостоящего расчета?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...