Years and months
EXTRACT pulls one part out of a date, which you can then group by:
SELECT EXTRACT(YEAR FROM order_date) AS year, COUNT(*) AS orders
FROM orders
GROUP BY EXTRACT(YEAR FROM order_date)
ORDER BY yearEXTRACT(MONTH FROM …) gives 1 to 12. To see each month of one year, filter to the year, then
group by the month.
In other databases
SELECT year(order_date), month(order_date), date_trunc('month', order_date) FROM ordersEXTRACT(YEAR FROM order_date) works too.
SELECT YEAR(order_date), MONTH(order_date), DATETRUNC(month, order_date) FROM ordersDATETRUNC is new in SQL Server 2022; on older versions use DATEFROMPARTS(YEAR(order_date), MONTH(order_date), 1).
SELECT YEAR(order_date), MONTH(order_date), DATE_FORMAT(order_date, '%Y-%m-01') FROM ordersMySQL has no date_trunc: DATE_FORMAT builds the first of the month as text.
SELECT EXTRACT(YEAR FROM order_date), EXTRACT(MONTH FROM order_date), date_trunc('month', order_date) FROM ordersSELECT EXTRACT(YEAR FROM order_date), EXTRACT(MONTH FROM order_date), DATE_TRUNC(order_date, MONTH) FROM ordersThe date comes first in BigQuery's DATE_TRUNC, and the part isn't in quotes.