Wie kann ich aus einem Datumsfeld nur nach Monat gruppieren (und nicht nach Tag gruppieren)?
So sieht mein Datumsfeld aus:
2012-05-01
Hier ist mein aktuelles 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
quelle
quelle
SELECT STUFF(SUBSTRING(CONVERT(VARCHAR, CURRENT_TIMESTAMP, 6), 4, 6), 4, 1, '-');
Closing_Date =
handelt es sich nur um den Spaltenalias, es ist dasselbe wieAS Closing_Date
nach dem Ausdruck. Es ist völlig subjektiv, aber ich persönlich finde diealias =
Notation viel einfacher zu lesen alsAS Alias
. Um mehr darüber zu erfahren, warum ich es bevorzuge, lesen Sie diesen Artikel von Aaron Bertrand.Verwenden Sie die DATEPART- Funktion, um den Monat aus dem Datum zu extrahieren.
Sie würden also so etwas tun:
SELECT DATEPART(month, Closing_Date) AS Closing_Month, COUNT(Status) AS TotalCount FROM t GROUP BY DATEPART(month, Closing_Date)
quelle
Ich habe die FORMAT- Funktion verwendet, um dies zu erreichen:
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
quelle
Durch die Zugabe von
MONTH(date_column)
inGROUP 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
quelle
Die DATEPART-Funktion funktioniert unter MySQL 5.6 nicht. Verwenden Sie stattdessen MONTH ('2018-01-01').
quelle
Versuche dies:
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
Auf diese Weise gruppieren Sie nach einem verketteten Datumsformat, verbunden mit einem -
quelle
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;
quelle
SQL Server 2012 Version oben,
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;
quelle
Sie können dies tun, indem Sie Year (), Month () Day () und datepart () verwenden.
In Ihrem Beispiel wäre dies:
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
quelle
Versuchen Sie den folgenden Code
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;
quelle