0
그래서 아래 열이 포함 된 테이블이 있습니다. positiondate에서 실행 평균을 계산하고 싶습니다 (예 : 3 일 전, dealno에 그룹화). 나는 "사례별로"하는 법을 알고 있지만, 문제는 약 200 개의 다른 DealNo가 있으므로 모든 거래에 대해 자신 만의 case by 절을 쓰고 싶지 않다는 것입니다.SQL 2008 그룹 별 평균 실행
는 dealNo 1에서 그 출력은 I 스크립트 이하 시도했지만 내 테이블 주위 300K 행을 포함하고 있기 때문에 매우 효과적 아니었다 (149 (243) 440 + 149 224 446 + 149 243 451)
DealNo PositionDate MarketValue
1 | 2016-11-27 | 149 243 440
2 | 2016-11-27 | 21 496 418
3 | 2016-11-27 | 32 249 600
1 | 2016-11-26 | 149 243 446
2 | 2016-11-26 | 21 496 418
3 | 2016-11-26 | 32 249 600
1 | 2016-11-25 | 149 243 451
3 | 2016-11-25 | 32 249 600
2 | 2016-11-25 | 21 496 418
3 | 2016-11-24 | 32 249 600
1 | 2016-11-24 | 149 225 582
2 | 2016-11-24 | 21 498 120
1 | 2016-11-23 | 149 256 867
2 | 2016-11-23 | 21 504 181
3 | 2016-11-23 | 32 253 440
1 | 2016-11-22 | 149 256 873
2 | 2016-11-22 | 21 506 840
3 | 2016-11-22 | 32 253 440
1 | 2016-11-21 | 149 234 535
2 | 2016-11-21 | 21 509 179
3 | 2016-11-21 | 32 253 600
평균되어야 원하는 그리고 약 200 다른 dealno. SQL 2008에서 더 효과적인 방법이 있습니까?
with cte as (
SELECT ROW_NUMBER() over(order by dealno, positiondate desc) as Rownr,
dealno,
positiondate,
Currency,
MvCleanCcy
FROM T1
)
select
rownr, positiondate, DealNo, Currency,
mvcleanavg30d = (select avg(MvCleanCcy) from cte2 where Rownr between c.Rownr and c.Rownr+3)
from cte as c
'149 243 440'이란 무엇입니까? 그 번호 하나 또는 세입니까? –