Jak mogę grupować tylko według miesięcy z pola daty (a nie grupować według dni)?
Oto jak wygląda moje pole daty:
2012-05-01
Oto mój obecny 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
źródło
źródło
SELECT STUFF(SUBSTRING(CONVERT(VARCHAR, CURRENT_TIMESTAMP, 6), 4, 6), 4, 1, '-');
Closing_Date =
dotyczy tylko aliasu kolumny, jest to to samo, coAS Closing_Date
po wyrażeniu. Jest to całkowicie subiektywne, ale osobiście uważam, żealias =
notacja jest znacznie łatwiejsza do odczytania niżAS Alias
. Aby dowiedzieć się więcej o tym, dlaczego wolę, przeczytaj artykuł Aarona Bertranda.Użyj funkcji DATEPART, aby wyodrębnić miesiąc z daty.
Więc zrobiłbyś coś takiego:
SELECT DATEPART(month, Closing_Date) AS Closing_Month, COUNT(Status) AS TotalCount FROM t GROUP BY DATEPART(month, Closing_Date)
źródło
W tym celu użyłem funkcji 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
źródło
Dodając
MONTH(date_column)
wGROUP 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
źródło
Funkcja DATEPART nie działa w MySQL 5.6, zamiast tego użyj MIESIĄCA („2018-01-01”)
źródło
Spróbuj tego:
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
W ten sposób grupujesz według połączonego formatu daty, połączonego znakiem -
źródło
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;
źródło
Wersja SQL Server 2012 powyżej,
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;
źródło
Możesz to zrobić za pomocą Year (), Month () Day () i datepart ().
W twoim przykładzie byłoby to:
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
źródło
Wypróbuj następujący kod
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;
źródło