Comment puis-je grouper uniquement par mois à partir d'un champ de date (et non par groupe par jour)?
Voici à quoi ressemble mon champ de date:
2012-05-01
Voici mon SQL actuel:
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
Je voudrais utiliser ceci:
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;
Cela regroupera par le premier de chaque mois, donc
`DATEADD(MONTH, DATEDIFF(MONTH, 0, '20130128'), 0)`
donnera '20130101'
. Je préfère généralement cette méthode car elle conserve les dates en tant que dates.
Sinon, vous pouvez utiliser quelque chose comme ceci:
SELECT Closing_Year = DATEPART(YEAR, Closing_Date),
Closing_Month = DATEPART(MONTH, 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 DATEPART(YEAR, Closing_Date), DATEPART(MONTH, Closing_Date), Category;
Cela dépend vraiment de votre sortie souhaitée. (L'année de clôture n'est pas nécessaire dans votre exemple, mais il se peut que la plage de dates dépasse une année).
Utilisez la fonction DATEPART pour extraire le mois de la date.
Donc, vous feriez quelque chose comme ça:
SELECT DATEPART(month, Closing_Date) AS Closing_Month, COUNT(Status) AS TotalCount
FROM t
GROUP BY DATEPART(month, Closing_Date)
J'ai utilisé la fonction FORMAT pour accomplir ceci:
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
En ajoutant MONTH(date_column)
dans 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
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;
La fonction DATEPART ne fonctionne pas sur MySQL 5.6, utilisez plutôt MONTH ('2018-01-01')