Haven't heard back, so I thought I'd provide my updated solution:
create table #Channels (
ChannelDate datetime,
SourceId int,
ChannelId int,
Value varchar(128));
insert into #Channels
values
('2015-11-01 16:45:59.953',1,1,'223,4923'),
('2015-11-01 16:46:00.127',1,2,'224,9357'), --*
('2015-11-01 16:46:00.327',1,3,'227,4183'), --*
('2015-11-01 16:46:00.527',1,4,'221,025'), --*
('2015-11-01 13:17:14.177',1,1,'223,0304'), --*
('2015-11-02 14:34:16.337',1,1,'223,1234'),
('2015-12-01 16:45:59.953',1,1,'323,4923'),
('2015-12-01 16:46:00.127',1,2,'324,9357'), --*
('2015-12-01 16:46:00.327',1,3,'327,4183'), --*
('2015-12-01 16:46:00.527',1,4,'321,025'), --*
('2015-12-01 13:17:14.177',1,1,'323,0304'); --*
with basedata as (
select
ChannelDate,
SourceId,
ChannelId,
Value,
rn = row_number() over (partition by ChannelId,dateadd(month,datediff(month,0,ChannelDate),0) order by ChannelDate asc)
from
#Channels
where
ChannelDate >= dateadd(month,datediff(month,0,ChannelDate),0) and ChannelDate < dateadd(month,datediff(month,0,ChannelDate),1)
)
select
ChannelDate,
SourceId,
ChannelId,
Value
from
basedata
where
rn = 1
order by
ChannelDate, ChannelId;