SQL Query Group By Datetime проблема? - PullRequest
0 голосов
/ 12 сентября 2010

У меня есть этот запрос SQL:

  SELECT DISTINCT 
         [BatchCode]
         ,SUM([Quantity]) as 'Created'
         ,[TotalQuantity]
         ,[Status]
         ,[Destination]
         ,[DateCreated]
         ,[CreatedBy]
    FROM [FGIS].[dbo].[DropshipPackinglist]
GROUP BY BatchCode, TotalQuantity, Status, Destination, CreatedBy, ModifiedBy, DateCreated

Результат таков:

BatchCode               Created   TotalQuantity   Status     Destination        DateCreated               CreatedBy
---------------------------------------------------------------------------------------------------------------
0005041007100AHWA11HG   86        86              CREATED    MediTelecom S.A.   2010-09-10  00:00:00.000    NULL
0005041007100AHWA11HGK  19        50              ALLOCATED  USA                2010-09-12 07:35:17.000     jy
0005041007100AHWA11HGK  31        50              ALLOCATED  USA                2010-09-12 07:35:20.000     jy

Моя проблема в том, что я не могу сгруппировать DateCreated из-за разницы во времени.

Я хочу сгруппировать его только по дате. Пример: 2010-09-12

Спасибо и всего наилучшего ...

Ответы [ 2 ]

4 голосов
/ 12 сентября 2010

Используйте CAST или CONVERT , чтобы изменить формат DATETIME, чтобы часть времени была пропущена:

  SELECT [BatchCode],
         SUM([Quantity]) as 'Created',
         [TotalQuantity],
         [Status],
         [Destination],
         CONVERT(VARCHAR(10), [DateCreated], 101) AS datecreated,
         [CreatedBy]
    FROM [FGIS].[dbo].[DropshipPackinglist]
GROUP BY BatchCode, 
         TotalQuantity, 
         Status, 
         Destination, 
         CreatedBy, 
         ModifiedBy, 
         CONVERT(VARCHAR(10), [DateCreated], 101)
2 голосов
/ 12 сентября 2010

Полагаю, стоит опубликовать это отдельно:

Использование преобразования символов для нарезки дат выходного времени (приведение или преобразование в varchar) медленнее, чем использование DateAdd(Day, DateDiff(Day, 0, DateCreated), 0).Я обработал полные результаты тестирования сценариев и производительности для поддержки этого утверждения .

SELECT DISTINCT 
   BatchCode
   ,SUM(Quantity) as Created
   ,TotalQuantity
   ,Status
   ,Destination
   ,DateAdd(Day, DateDiff(Day, 0, DateCreated), 0) as DayCreated
   ,CreatedBy
FROM FGIS.dbo.DropshipPackinglist
GROUP BY
   BatchCode,
   TotalQuantity,
   Status,
   Destination,
   CreatedBy,
   ModifiedBy,
   DateDiff(Day, 0, DateCreated) -- note that the DateAdd convert back to datetime is not needed

Кроме того, обратите внимание, что ваш список GROUP BY не совпадает с вашим списком SELECT, поэтому некоторые изменениянеобходимо.

ОБНОВЛЕНИЕ

Кажется, что экономия ЦП при использовании преобразований DateAdd и varchar, хотя и относительно много, совсем не так уж много (только долимиллисекунда на строку).Тем не менее, это все еще разница в производительности, и мне кажется, лучше всего сохранить все возможные биты.

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