Como posso contar vários campos distintos sem repetir a consulta?

Tenho uma consulta com vários agrupamentos que retorna uma contagem por mês. Algo assim

SELECT field1, field2, year(someDate), month(someDate), count(*) as myCount
FROM myTable
WHERE field5 = 'test'
GROUP BY field1, field2, year(someDate), month(someDate)

O problema é que desejo que a contagem seja distinta por dia, com base em um campo de identificação + no campo de data (sem a hora). Por exemplo, quero obter a contagem distinta de IDs todos os dias, por mês. Então, eu quero algo como isto:

SELECT field1, field2, year(someDate), month(someDate), 
       count(distinct someID, someDate) as myCount
FROM myTable
WHERE field5 = 'test'
GROUP BY field1, field2, year(someDate), month(someDate)

Existem 2 problemas com isso:

Não é possível listar 2 campos distintos para uma contagem agregadaIsso incluirá a hora da data também, para não filtrar nada, pois quase sempre haverá uma hora diferente

Eu posso cuidar 2. facilmente convertendo para um varchar apenas da data, mas não sei como lidar com a questão de vários campos distintos. Não consigo usaresta solução, pois não quero repetir toda a cláusula where e agrupar por cláusula. Isto é o que eu vim com:

SELECT field1, field2, year(someDate), month(someDate), 
       count(distinct someID + CONVERT(VARCHAR, someDate, 112)) as myCount
FROM myTable
WHERE field5 = 'test'
GROUP BY field1, field2, year(someDate), month(someDate)

Em vez de listar os campos distintos em uma lista delimitada por vírgulas, eu simplesmente os concatenava. Existe alguma desvantagem nesse método que eu deveria procurar? Posso contar com isso para ser preciso? E - existe alguma maneira melhor de fazer isso?

Basicamente, estou agrupando por mês, mas a contagem "distinta" deve ser baseada no dia. Por exemplo, se eu tiver o id 31 em 3 e 5 de janeiro, quero contar como 2 para janeiro, mas se tiver o id 31 duas vezes em 3 de janeiro, só quero contar uma vez.

Alguns dados básicos de amostra e saída esperada (ignorando o campo1 e o campo2 para isso):

*Date*              *ID*
1/3/12 00:00:09     22
1/3/12 00:13:00     22
1/4/12 12:00:00     22
1/7/12 15:00:45     27
1/15/12 15:00:00    22
2/6/12 00:00:09     50
2/8/12 00:13:00     44
2/8/12 12:00:00     45
2/22/12 15:00:45    33
2/22/12 15:00:00    33
2/22/12 15:00:00    44

*Year*  *Month* *Count*
2012    Jan     4
2012    Feb     5

questionAnswers(4)

yourAnswerToTheQuestion