Hola
He estado mirando ejemplos del uso del OVER() para evitar subconsultas y no me acabo de aclarar. He probado con este código y no obtengo lo que quiero:
declare @t table (c1 datetime,c2 datetime, c3 int, c4 int)
insert into @t values ('20160601', '19900101 8:15', 2,1)
,('20160601', '19900101 8:35', 1,2)
,('20160601', '19900101 8:20', 2,1)
,('20160601', '19900101 8:25', 3,2)
,('20160601', '19900101 8:30', 4,1)
--select * from @t
SELECT c1,datepart(hour,c2)
,sum(c3) over (partition by c1,datepart(hour,c2))
,count(c4) over (partition by c1,datepart(hour,c2),c4)
from @t
go
este es el resultado
2016-06-01 00:00:00.000 8 12 3
2016-06-01 00:00:00.000 8 12 3
2016-06-01 00:00:00.000 8 12 3
2016-06-01 00:00:00.000 8 12 2
2016-06-01 00:00:00.000 8 12 2
pero esperaba que como mismo aparece sum(c3)=12 (2+1+2+3+4) en cada fila tambien me saliera el count(c4) =2 pues en las 5 lineas hay solo 2 valores lo quie se repiten. Claro con algo tan sencillo como:
select c1,sum(c3),datepart(hour,c2),COUNT(distinct c4) from @t
group by c1,datepart(hour,c2)
logro el resultado esperado
2016-06-01 00:00:00.000 12 8 2
pero creía que ambas soluciones me daría el mismo resultado ¿ que estoy haciendo mal ?
Gracias.