2014-06-27 3 views
0

Я использую следующий скрипт, чтобы подсчитать количество ShopId в течение одного года.Как использовать GROUP с DATEPART?

Мне также необходимо разбивать результаты на месяц в течение года.

Так конечный результат должен быть

MONTH 1 
    SHOPID 5  100 
    SHOPID 4  90 
MONTH 2 
    SHOPID 1  150 
    SHOPID 4  80 

SELECT ShopId, Count(ShopId) as Interest 
    FROM dbo.Analytics 
    WHERE DateCreated >= '2014' AND DateCreated < '2015' 
    GROUP BY ShopId ORDER BY Interest DESC 

Структура таблицы

CREATE TABLE Analytics 
(
DateCreated dateTime2(2), 
ShopId int 
); 

Что я должен изменить в моем сценарии? Должен ли я использовать DATEPART около GROUP BY

+0

Любое предложение для лучшего названия w elcome :-) – GibboK

+0

DateCreated - поле DateTime? – Jesuraja

+1

Пожалуйста, разместите свою структуру стола – Raj

ответ

1

Вы можете использовать DatePart.

Попробуйте как этот

SELECT DatePart(mm,datecreated) 'Month',ShopId, Count(ShopId) as Interest 
    FROM dbo.Analytics 
    WHERE year(DateCreated) = '2015' 
    GROUP BY Datepart(mm,datecreated),ShopId 
    ORDER BY Interest DESC 

DATEPART вернется только номер месяца. Если вам нужен результат будет иметь название месяца, то вы должны использовать DateName

Попробуйте

SELECT Select DateName(month , DateAdd(month , DatePart(mm,datecreated) , -1)) 'Month',ShopId, Count(ShopId) as Interest 
    FROM dbo.Analytics 
    WHERE year(DateCreated) = '2015' 
    GROUP BY DateName(month , DateAdd(month , DatePart(mm,datecreated) , -1)),ShopId 
    ORDER BY Interest DESC 
+0

Как бы вы заказывали по месяцам? – GibboK

+1

@GibboK Просто используйте 'Order By DatePart (mm, datecreated)' –

1

Попробуйте

SELECT datepart(mm,datecreated) 'Month',ShopId, Count(ShopId) as Interest 
    FROM dbo.Analytics 
    WHERE year(DateCreated) = '2014' 
    GROUP BY datepart(mm,datecreated),ShopId ORDER BY Interest DESC 
0

Попробуйте это:

SELECT  DATEPART(MONTH, DateCreated) AS MONTH, ShopId, COUNT(ShopId) AS Interest 
FROM  dbo.Analytics 
WHERE  YEAR(DateCreated) = '2014' 
GROUP BY DATEPART(MONTH, DateCreated), ShopId 
ORDER BY DATEPART(MONTH, DateCreated) ASC, Interest DESC 
0

Здесь вы собираетесь нужно группировать год тоже упаковывают там более широкий временной диапазон:

select convert(varchar(6), DateCreated, 112) as Time, shopid, Count(ShopId) as Interest 
    FROM Analytics 
    WHERE DateCreated >= '2014' AND DateCreated < '2015' 
    GROUP BY convert(varchar(6), DateCreated, 112), ShopId ORDER BY Interest DESC 
Смежные вопросы