Как я могу группировать только по месяцам из поля даты (а не по дням)?
Вот как выглядит мое поле даты:
2012-05-01
Вот мой текущий SQL:
select Closing_Date, Category, COUNT(Status)TotalCount from MyTable
where Closing_Date >= '2012-02-01' and Closing_Date <= '2012-12-31'
and Defect_Status1 is not null
group by Closing_Date, Category
sql
sql-server
tsql
user1858332
источник
источник
SELECT STUFF(SUBSTRING(CONVERT(VARCHAR, CURRENT_TIMESTAMP, 6), 4, 6), 4, 1, '-');
Closing_Date =
- это просто псевдоним столбца, он такой же, какAS Closing_Date
после выражения. Это полностью субъективно, но я лично считаю, чтоalias =
обозначения легче читать, чемAS Alias
. Подробнее о том, почему я предпочитаю его, читайте в статье Аарона Бертрана.Используйте функцию DATEPART, чтобы извлечь месяц из числа.
Итак, вы бы сделали что-то вроде этого:
SELECT DATEPART(month, Closing_Date) AS Closing_Month, COUNT(Status) AS TotalCount FROM t GROUP BY DATEPART(month, Closing_Date)
источник
Для этого я использовал функцию FORMAT :
select FORMAT(Closing_Date, 'yyyy_MM') AS Closing_Month , count(*) cc FROM MyTable WHERE Defect_Status1 IS NOT NULL AND Closing_Date >= '2011-12-01' AND Closing_Date < '2016-07-01' GROUP BY FORMAT(Closing_Date, 'yyyy_MM') ORDER BY Closing_Month
источник
Путем добавления
MONTH(date_column)
вGROUP BY
.SELECT Closing_Date, Category, COUNT(Status)TotalCount FROM MyTable WHERE Closing_Date >= '2012-02-01' AND Closing_Date <= '2012-12-31' AND Defect_Status1 IS NOT NULL GROUP BY MONTH(Closing_Date), Category
источник
Функция DATEPART не работает в MySQL 5.6, вместо этого используйте MONTH ('2018-01-01')
источник
Попробуй это:
select min(closing_date), date_part('month',closing_date) || '-' || date_part('year',closing_date) AS month, Category, COUNT(Status)TotalCount FROM MyTable where Closing_Date >= '2012-02-01' AND Closing_Date <= '2012-12-31' AND Defect_Status1 is not null GROUP BY month, Category, ORDER BY 1
Таким образом, вы группируете по объединенному формату даты, к которому присоединяется -
источник
SELECT to_char(Closing_Date,'MM'), Category, COUNT(Status) TotalCount FROM MyTable WHERE Closing_Date >= '2012-02-01' AND Closing_Date <= '2012-12-31' AND Defect_Status1 IS NOT NULL GROUP BY Category;
источник
Версия SQL Server 2012 выше,
SELECT format(Closing_Date,'yyyy-MM') as ClosingMonth, Category, COUNT(Status) TotalCount FROM MyTable WHERE Closing_Date >= '2012-02-01' AND Closing_Date <= '2012-12-31' AND Defect_Status1 IS NOT NULL GROUP BY format(Closing_Date,'yyyy-MM'), Category;
источник
Вы можете сделать это с помощью Year (), Month () Day () и datepart ().
В вашем примере это будет:
select Closing_Date, Category, COUNT(Status)TotalCount from MyTable where Closing_Date >= '2012-02-01' and Closing_Date <= '2012-12-31' and Defect_Status1 is not null group by Year(Closing_Date), Month(Closing_Date), Category
источник
Попробуйте следующий код
SELECT Closing_Date = DATEADD(MONTH, DATEDIFF(MONTH, 0, Closing_Date), 0), Category, COUNT(Status) TotalCount FROM MyTable WHERE Closing_Date >= '2012-02-01' AND Closing_Date <= '2012-12-31' AND Defect_Status1 IS NOT NULL GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, Closing_Date), 0), Category;
источник