Recently, I received a requirement for aggregating data by date. In this comprehensive article, I’ll walk you through various techniques for effectively using SQL Server’s GROUP BY clause with date values and provide multiple examples.
SQL Server GROUP BY Date
Dates in SQL Server contain date and time components, meaning when you group by a datetime column, SQL Server groups records by the exact timestamp.
Let us discuss all the possible methods of how to group by date in SQL Server.
Method 1: Using Date Functions
The most straightforward approach to grouping by date (ignoring time) is to use SQL Server’s CAST or CONVERT functions.
Using CAST Function
SELECT CAST(Sale_Date AS DATE) AS SaleDay,
SUM(amount) AS TotalSales
FROM Sales
GROUP BY CAST(Sale_Date AS DATE)
ORDER BY SaleDay
After executing the above query, I got the expected output, which is shown in the screenshot below.

Using CONVERT Function
SELECT CONVERT(DATE, Sale_Date) AS SaleDay,
SUM(Amount) AS TotalSales
FROM Sales
GROUP BY CONVERT(DATE, Sale_Date)
ORDER BY SaleDay
After executing the above query, I got the expected output, as shown in the below screenshot.

Method 2: Grouping by Month, Quarter, and Year
SQL Server offers several approaches in this case.
Grouping by Month
Here, we can use the DATEPART() using this query.
SELECT DATEPART(YEAR, Sale_Date) AS Year,
DATEPART(MONTH, Sale_Date) AS Month,
SUM(sale_amount) AS MonthlySales
FROM Sales
GROUP BY DATEPART(YEAR, Sale_Date), DATEPART(MONTH, Sale_Date)
ORDER BY Year, Month
After executing the above query, I got the expected output as shown in the screenshot below.

We can also use the Date() for this purpose.
SELECT YEAR(SaleDate) AS Year,
MONTH(SaleDate) AS Month,
SUM(Amount) AS MonthlySales
FROM SalesTransactions
GROUP BY YEAR(SaleDate), MONTH(SaleDate)
ORDER BY Year, Month
After executing the above query, I got the expected output, as shown in the screenshot below.

Grouping by Quarter
We can also group by quarter using the DATEPART function in the query below.
SELECT DATEPART(YEAR, Sale_Date) AS Year,
DATEPART(QUARTER, Sale_Date) AS Quarter,
SUM(sale_amount) AS QuarterlySales
FROM Sales
GROUP BY DATEPART(YEAR, Sale_Date), DATEPART(QUARTER, Sale_Date)
ORDER BY Year, Quarter
After executing the above query, I got the expected output, as shown in the screenshot below.

Grouping by Year
We can also group by year using the query below.
SELECT YEAR(Sale_Date) AS Year,
SUM(sale_amount) AS AnnualSales
FROM Sales
GROUP BY YEAR(Sale_Date)
ORDER BY Year
After executing the above query, I got the expected output, as shown in the screenshot below.

Method 3: Using EOMONTH
Using the query below, we can also use the EOMONTH function (available in SQL Server 2012 and later).
SELECT EOMONTH(SaleDate) AS MonthEndDate,
SUM(Amount) AS MonthlySales
FROM SalesTransactions
GROUP BY EOMONTH(SaleDate)
ORDER BY MonthEndDate
After executing the above query, I got the expected output, as shown in the screenshot below.

Method 4: Date Groupings with DATEADD and DATEDIFF
We often use the combination of DATEADD and DATEDIFF functions.
Grouping by Week (Starting Sunday)
SELECT DATEADD(DAY,
DATEDIFF(DAY, 0, SaleDate)/7*7, 0) AS WeekStartDate,
SUM(Amount) AS WeeklySales
FROM SalesTransactions
GROUP BY DATEADD(DAY, DATEDIFF(DAY, 0, SaleDate)/7*7, 0)
ORDER BY WeekStartDate
After executing the above query, I got the expected output, as shown in the screenshot below.

Method 5: Using the FORMAT Function
SQL Server 2012 introduced the FORMAT function, which provides great flexibility for date formatting.
SELECT FORMAT(Sale_Date, 'yyyy-MM (MMMM)') AS MonthGroup,
SUM(sale_amount) AS MonthlySales
FROM Sales
GROUP BY FORMAT(Sale_Date, 'yyyy-MM (MMMM)')
ORDER BY MIN(Sale_Date)
After executing the above query, I got the expected output, as shown in the screenshot below.

Best Practices
Below are some best practices while working with SQL server date grouping.
- Be consistent with your date grouping approach throughout your application
- Consider performance implications for large datasets
- Use appropriate data types – DATE for date-only values, DATETIME2 for higher precision needs
- Create helper functions for complex date logic to ensure consistency
- Test with edge cases like leap years, daylight saving time changes, and month boundaries
Conclusion
By understanding these various methods, you can choose the right solution for any date grouping requirement. Remember that the best approach depends on your specific requirements, data volume, and performance needs.
You may also like the articles below.
After working for more than 15 years in the Software field, especially in Microsoft technologies, I have decided to share my expert knowledge of SQL Server. Check out all the SQL Server and related database tutorials I have shared here. Most of the readers are from countries like the United States of America, the United Kingdom, New Zealand, Australia, Canada, etc. I am also a Microsoft MVP. Check out more here.