#sql #sql-server
#sql #sql-сервер
Вопрос:
Я использую следующий скрипт для подсчета количества shopId за один год.
Мне также нужно разбить результат по месяцам за год.
Таким образом, конечный результат должен быть
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
Комментарии:
1. Любые предложения по лучшему названию приветствуются 🙂
2. DateCreated — это поле DateTime?
3. Пожалуйста, также опубликуйте свою структуру таблицы
4. Добавлена структура таблицы @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
Комментарии:
1. Как бы вы упорядочили по месяцам?
2. @GibboK Просто используйте
Order By DatePart(mm,datecreated)
Ответ №2:
Попробуйте это
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
Ответ №3:
Здесь вам также нужно сгруппировать год, если существует более широкий временной диапазон :
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
Ответ №4:
Попробуйте это:
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