이것은 내 첫 번째 질문이며이 항목을 어떤 항목으로 분류할지 모르기 때문에이 질문을 게시하기 전에 검색을 수행하지 않았습니다.SQL이 이전 데이터를 기반으로 피벗 함
이것은 SQL과 관련된 질문입니다. 필자는 피벗 (Pivot)이 더 친숙한 데이터 출력을 얻기 위해 필요한 데이터라고 생각합니다.
ID, 사용자 이름, 상태, 날짜 시간 각각 4 개의 열 테이블이 있습니다. 상태는 로그인 및 로그 아웃과 같은 사용자 작업을 결정합니다.
ID Username Status DateTime
1 A 0 2017-10-20 05:00:00
2 A 0 2017-10-20 07:23:10
3 B 0 2017-10-20 07:24:45
4 A 1 2017-10-20 09:50:55
5 A 0 2017-10-20 13:00:56
6 B 1 2017-10-20 17:13:28
7 B 0 2017-10-20 17:50:47
8 A 1 2017-10-20 21:38:17
9 A 0 2017-10-20 21:38:19
10 B 1 2017-10-20 21:40:02
나는 로그인으로 Status0과 상태 1을 필터링하고 로그 아웃 할 필요하므로, 어떠한 Status0 사이에
ID Username Status DateTime
1 A 0 2017-10-20 05:00:00
2 A 0 2017-10-20 07:23:10
4 A 1 2017-10-20 09:50:55
이
Username Status0 Status1
A 2017-10-20 05:00:00 2017-10-20 09:50:55
하고 다음 'A'결과 것
무시 될 것이다 마지막 Status1 (2017-10-20 09:50:55)보다 크거나 같은 Status0의 DateTime을 검색하고 데이터 끝까지내가 아래로 포맷 할 필요가있는 엔드 데이터 :
Username Status0 Status1
A 2017-10-20 05:00:00 2017-10-20 09:50:55
B 2017-10-20 07:24:45 2017-10-20 17:13:28
A 2017-10-20 13:00:56 2017-10-20 21:38:17
B 2017-10-20 17:50:47 2017-10-20 21:40:02
A 2017-10-20 21:38:19 null
내가 어떻게이 결과를 얻을 수 있습니다? 내 논리는 재귀 적으로 Status1을 비교하고 다음 Status0을 찾아야한다고 말하지만 SQL 쿼리에 넣는 방법을 모르겠습니다.
도움을 주시면 감사하겠습니다. 전에 고마워.
편집 : SQL Server 2008을 사용 중입니다.
그것은 특정 날짜가 상태가없는 가능성이 매우 옳지 않다 http://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=80f8aae9c95f042bf9c9ed17c3350e76 –
입니다 약간 더 효율적으로 할 수있다 1 데이터, 그래서 내가 정확히 무엇을 찾고 있어요. –