2015-01-08 3 views
0

티켓 정보가있는 테이블이있는 헬프 데스크 시스템이 있습니다. 나는 루프를 사용하지 않고 sql에서 반복적 인 데이터를 검색하는 방법은 무엇입니까?

ID status  create_date  closing_date  
--------------------------------------------------------- 
1 closed 2015-01-01 14:06:30 2015-01-02 18:06:42 
2 closed 2015-01-01 15:16:42 2015-01-02 08:12:10 
-  -    -      - 
-  -    -      - 

지금 내가 지난 3 개월을 찾고 지난 5 주 만에 티켓을 닫습니다 촬영 시간의 수를 표시하려면,이 같은 데이터 뭔가 SQL 서버에서 테이블을 가지고있다.

예를 들어, 오늘부터 지난 5 주 동안의 데이터를 보여주고 싶습니다 (49,50,51,52,1). 그리고 매주 마지막 2 개월의 닫힌 티켓을 봐야합니다. (49 주 동안, 데이터는 주 49-60 일과 주 49 일 종료일 사이에 있어야합니다). 현재,이 같은 결과를 얻기 위해 루프를 사용했다

, 그것은 놨 때문에

다음과 같은 데이터를 반환
declare @week_start datetime, @week_end datetime, @week int, @last_week int, @week_number int 
set @last_week = datepart(wk, dateadd(wk, -1, getdate())) 
set @week_number = dbo.F_ISO_WEEK_OF_YEAR(dateadd(wk, -5, getdate())) 
set @week = @last_week - 4 
set @week_start = dateadd(day, -60, dateadd(wk, -5, DATEADD(week, DATEDIFF(day, 0, getdate())/7, 4))) 
set @week_end = dateadd(wk, -5, DATEADD(week, DATEDIFF(day, 0, getdate())/7, 4)) 
while @week <= @last_week 
begin 
select @week_number as week_number, 
cast(avg(cast(Datediff(hour,create_date,closing_date) as decimal (10,2))) as decimal(10,2)) Hours 
FROM tickets 
where closing_date between @week_start 
and @week_end 
--group by dbo.F_ISO_WEEK_OF_YEAR(closing_date) 
set @week_start = dateadd(wk, 1, @week_start) 
set @week_end = dateadd(wk, 1, @week_end) 
set @week = @week + 1 
set @week_number = @week_number + 1 
end 

지금

week_number Hours 
-------------------- 
    49   121.56 
    50   129.06 
    51   125.57 
    52   125.90 
    53   130.52 

, 나는 루프를 사용하지 않으 주 숫자를 올리고 ISO 주 번호를 표시하려고합니다. 그래서 여기

내 수정 된 코드,

select dbo.F_ISO_WEEK_OF_YEAR(closing_date) as week_number, 
cast(avg(cast(Datediff(hour,create_date,closing_date) as decimal (10,2))) as decimal(10,2)) Hours 
FROM tickets 
where closing_datebetween DATEADD(wk, -5, getdate()) and DATEADD(wk, -1, getdate()) 
group by dbo.F_ISO_WEEK_OF_YEAR(closing_date) 

입니다 그러나 그것은 특정 주에서 지난 2개월보고 아니에요으로 잘못 다음과 같은 데이터, 내가 할

week_number Hours 
-------------------- 
    49   142.69 
    50   262.76 
    51   95.50 
    52   85.39 
    1   75.90 

을 반환 루프를 사용하지 않고도 동일한 결과를 얻으려면 내 쿼리를 어떻게 수정할 수 있습니까?

도움이 될 것입니다.

감사합니다.

답변

0

내 기본 데이터를 보지 않고도 전체 컨텍스트를 얻는 것이 약간 힘들지 만, 반복 코드에서 슬라이딩 창 (예 : 5 주 전에 2 개월 전을보고 있음)이 처음으로 추측됩니다. + 5 주, 4 주 전, 2 개월 후 +4 등). select 문은 한 시점의 값을 정적으로보고 있습니다.

SQL Server 2012 이상을 실행하는 경우 행 프레임을 사용하여 슬라이딩 윈도우 (http://msdn.microsoft.com/en-us/library/ms189461.aspx)를 정의 할 수 있습니다. 또는 5 행을 반환하기 만하면 같은 테이블을 5 번 누르는 것과 같이 보고서를 작성하는 것이 좋지 않다는 것을주의해서 말합니다. 샘플 데이터를 제공 할 수 있다면 코드 별 응답을 좀 더 얻을 수 있습니다.

관련 문제