ОБНОВЛЕНО
Исходя из ваших данных выборки, это дает требуемый результат:
Declare @Tab table ([Date] datetime,ID int)
insert into @Tab([Date],ID) values
('2012-01-03T00:00:09.000', 22),
('2012-01-03T00:13:00.000', 22),
('2012-01-04T12:00:00.000', 22),
('2012-01-07T15:00:45.000', 27),
('2012-01-15T15:00:00.000', 22),
('2012-02-06T00:00:09.000', 50),
('2012-02-08T00:13:00.000', 44),
('2012-02-08T12:00:00.000', 45),
('2012-02-22T15:00:45.000', 33),
('2012-02-22T15:00:00.000', 33),
('2012-02-22T15:00:00.000', 44)
select DATEADD(month,DATEDIFF(month,0,[Date]),0) as MonthStart,SUM(distinctDayIDs)
from
(
SELECT DATEADD(day,DATEDIFF(day,0,[Date]),0) as [Date],
count(distinct ID) as distinctDayIDs
FROM @Tab
--WHERE field5 = 'test'
GROUP BY DATEADD(day,DATEDIFF(day,0,[Date]),0)
) t
group by DATEADD(month,DATEDIFF(month,0,[Date]),0)
Я думаю, потому что мы должны делать подсчет на каждый день, мы должны сделать это как две отдельные операции группировки.
Предыдущий ответ
Похоже, что желаемый результат будет field1
, field2
, дата и количество различных идентификаторов на эту дату?
Если так, я думаю, вы слишком усложняете вещи:
SELECT field1, field2, DATEADD(day,DATEDIFF(day,0,someDate),0) as Date,
count(distinct someID) as myCount
FROM myTable
WHERE field5 = 'test'
GROUP BY ffield1, field2, DATEADD(day,DATEDIFF(day,0,someDate),0)
(я использую DATEADD
/ DATEDIFF
чтобы вырезать часть времени вместо преобразования в varchar
)