2011-10-11 3 views
0

나는 응용 프로그램의 다양한 지점에서 사용자 이름과 타임 스탬프를 기록하는 액세스 로그를 가지고 있습니다. 나는 그들이 응용 프로그램에서 지출하는 시간을 대략적으로 볼 수 있는지보고 싶습니다. 기본적으로 타임 스탬프를 기준으로 각 레코드를 마지막 액세스 레코드에 결합하려고하므로 시간 차이를 파악할 수 있습니다.타임 스탬프를 기준으로 마지막 레코드 합치기

타임 스탬프가 현재 레코드보다 작은 첫 번째 레코드에 참여하는 방법을 생각할 수 없습니다. 이것을하는 방법은 무엇입니까? 이 같은

+0

사용중인 데이터베이스 엔진 및 버전은 무엇입니까? – Lamak

+0

죄송합니다. MS-SQL 2008 – Kratz

답변

1

시도 뭔가 :

SELECT A.UserName, A.EntryDate, DATEDIFF(ss,A.EntryDate, B.EntryDate) SecondsDuration 
FROM YourTable A 
OUTER APPLY (SELECT MAX(EntryDate) EntryDate 
      FROM YourTable 
      WHERE UserName = A.UserName AND EntryDate < A.EntryDate) B 
+0

감사합니다. 나는 적용에 관해 읽어야 할 것이다, 나는 결코 전에 그것을 사용하지 않았다. – Kratz

1

내가 타임 스탬프 첫 번째 레코드에 가입하는 방법을 생각할 수 없다는 현재 레코드보다 작습니다. 이것을하는 방법은 무엇입니까? 작업을해야 다음과 유사한

뭔가 :

물론
SELECT 
    lt.*, 
    lastentry.timeofEntryColumn, 
    DATEDIFF(second, lt.timeofEntryColumn, lt.timeofEtnryColumn) AS DifferenceinSeconds 
FROM logTable lt 
LEFT OUTER JOIN logtable AS lastentry 
ON lastentry.ID = (SELECT TOP 1 ID FROM logtable lt2 
      WHERE lt2.timeofEntryColumn < lt.timeofEntryColumn 
      ORDER BY lt2.timeofEntryColumn desc) 

,이 몇 가지 더 추가해야합니다 어쩌면 외부에 조건이 있음을 가입

당신은 거의 자신에게 대답을했다 사용자 ID가 일치해야합니다.

+0

동일한 사용자의 마지막 항목을 선택하는 조건을 어떻게 추가합니까? 이것은 단지 마지막 항목과의 시차를 찾습니다. 해당 조건을 하위 쿼리에 추가하려면 어떻게합니까? – Kratz

관련 문제