2010-05-04 3 views
0

내 첫 번째 게시물과 나는 정말 부드러운 MSSQL에 너무 친절 :-)SQL - 쿼리가 실행 중일 때 datediff를 사용합니까?

나는 데이트 테이블을 사용하려고하는 테이블이 있습니다. 나는 쿼리를 게시 할 경우 가장 쉬운 것이라고 생각하고

select mh.agetime, mh.whatid 

from mailhistory mh 
inner join mail m 
on mh.mailid=m.myid 
where (mh.whatid=17 or mh.whatid=11 or mh.whatid=0) and maincontactid=287816 and mailid=276086 

order by agetime 

정말의 maincontactid 및 mailid 내가 쿼리를 만드는 동안 결과를 제한하는 데 그냥 거기에 현재 최초 발생합니다. 다음과 같이 내가 (일) 날짜의 차이를 보여주는 세 번째 열을 만들 것입니다 쿼리 실행으로 세 번째 열을 만들기 위해 노력하고

AGETIME     WHATID 
1899-12-30 00:00:00.000 0 
1899-12-30 00:48:10.000 11 
1899-12-31 02:16:49.000 17 
1899-12-31 06:29:08.000 11 
1900-01-18 15:31:40.000 17 
1900-02-11 14:56:59.000 11 

결과는 ...입니다 ... (11) 및 (17)의 WHATID있는 항목 ... 사이 그래서 나는이 같은 결과 후 해요 : 할 내 쿼리를 변환하는 방법이 ... 그런

AGETIME     WHATID DIFFERENCE 
1899-12-30 00:00:00.000 0   NULL 
1899-12-30 00:48:10.000 11  0 
1899-12-31 02:16:49.000 17  1 
1899-12-31 06:29:08.000 11  0 
1900-01-18 15:31:40.000 17  18 
1900-02-11 14:56:59.000 11  22 

뭔가 그래서 같은 DATEDIFF 실행 그?

미리 감사드립니다. 크리스

답변

0

위의 SQL Server 2005 또는를 사용하여, 당신은 CTE를하고 현재 결과 집합에 ROW_NUMBER를 할당 할 수있는 경우

. 그런 다음 Current.Row_Num = Previous.Row_Num -1을 사용하여 CTE에 대한 왼쪽 자체 조인을 수행 한 다음 날짜 차이를 가져올 수 있습니다. 접근이 링크에서 쇼와 같은 유사합니다 : SQL Server의

http://www.kodyaz.com/articles/sql-select-previous-and-next-rows-with-current-row-in-tsql.aspx

결과 집합에는 그룹화가없는 가정 2000

:

아마 임시 테이블 변수를 생성하는 대신 것이라고는 (rownumber 역할을 할 것입니다) 신원이 제기 된 CTE는 2005 년 동안 위에 기술 된 것과 같은 논리를 적용 할 것입니다. CTE 대신 큰 변화 만있을 것입니다. 우리는 temp 테이블 변수를 사용할 것이고 rownumber 대신에 temp에 ID를 사용할 것입니다 표.

+0

안녕하세요, 사전에 지정 했어야합니다.하지만 SQL Server 2000뿐만 아니라 2005에서도 실행해야합니다 ... 2005 년에 멋지게 작동합니다! 죄송합니다! :-( – Twiss