2013-03-18 2 views
1

나는이 답변을 찾으려고 인터넷 검색을 조금 해봤지만 SQL Server의 OVER() 함수와 에뮬레이트하는 방법에 관한 기사를 보았습니다 ... 하지만 내 급여 등급보다 높습니다. PMySQL : 값이 연속적으로 나타나는 횟수를 세어보십시오.

나는 간단하게 말하면서 학생들 표와 실천 기둥이 있다고 말합니다. 나는 그들이 손을 들었거나, 손을 들지 않았거나, 수업에 참석하지 않은 연속적인 횟수를 세는 쿼리를 만들고 싶다. 주말 수업은 없으므로 오늘 FirstFoundDate뿐만 아니라 실제 기록도 세어 봐야합니다. 학생 A가 3 주 동안 손을 똑바로 세우면 (15 = 5 일 X 3 주), 그 수는 0이됩니다.

아이디어가 있으십니까? 이것은 우리에게 테이블의 모든 연속 작업을 제공하는 방법에 대한

select * 
from student_action maindata 
where not exist (select * from student_action action_count 
       where maindata.student_id = action_count.student_id 
        and maindata.action_timestamp < action_count.action_timestamp 
        and maindata.action <> action_count.action) 

감사합니다,

+1

테이블 스키마를 표시하십시오. – eggyal

+0

위는 은유 였고, 실제 테이블 스키마는 예제와 일치하지 않으며 질문을 혼란스럽게합니다. 그래서 ... 이 표 tblActions StudentID AS INT, 액션 AS INT를 작성, 날짜 DATE END – Bodi

+2

로 샘플 데이터를 확인하고 결과를 예상하는 것이 좋을 것입니다. –

답변

2

나는 이것에 대해 생각하고, 이제 시작하자 봤는데 ...

, 각 연속 발생에 대해 하나의 행. 그런 다음 그룹별로 계산합니다.

select count(*), maindata.student_id, maindata.action 
from student_action maindata 
where not exist (select * from student_action action_count 
       where maindata.student_id = action_count.student_id 
        and maindata.action_timestamp < action_count.action_timestamp 
        and maindata.action <> action_count.action) 
group by maindata.student_id, maindata.action 
+0

놀라운! Marlin, 고맙습니다. 완벽하게 작동했습니다! (아직 충분히 냉담하지 않아서 투표 할 수 없습니다.) – Bodi

관련 문제