Примерно так будет работать на MS SQL Server:
select
distinct
dateadd(day, -1 * DAY(datefield) + 1, datefield)
From
datetable
order by
dateadd(day, -1 * DAY(datefield) + 1, datefield)
Вызов функции DATEADD в основном вычитает (день-1) ДНЕЙ из текущей даты -> вы всегда получаете первое число в любом месяце, в котором эта дата.
Сортировка, и все готово! : -)
Кроме того, вы также можете добавить эту функцию в таблицу в качестве «вычисляемого столбца», а затем использовать ее для простого доступа:
alter table yourTable
add FirstOfMonth As DATEADD(day, -1 * DAY(datefield) + 1, datefield) persisted
Тогда ваш запрос будет еще проще:
SELECT DISTINCT FirstOfMonth
FROM YourTable
ORDER BY FirstOfMonth
Марк