0

列が次の2つの行と等しいemployeeExamテーブルから失敗した従業員を選択したい。status0

結果は次のようになります。

ID  COURSE_ID  EMPLOYEE_ID  DEGREE  DATE                             STATUS  NUMOFTAKINGEXAMS
4   2          4            17      January, 15 2013 00:00:00+0000   0       2

これが私がしたことです:
SQL Fiddle

さらに明確にするために: で並べ替えた場合、結果には同じandと= 0 が直接相互idにある試験のデータのみが含まれる必要があります。course_idemployee_idstatus

4

3 に答える 3

0
 SELECT a.*
   FROM
      ( SELECT x.*
             , COUNT(*) rank
          FROM employeeExam x 
          JOIN employeeExam y 
            ON y.course_id = x.course_id 
           AND y.employee_id = x.employee_id 
           AND y.date <= x.date 
         GROUP 
           BY id 
      ) a
   JOIN
      ( SELECT x.*
             , COUNT(*) rank
          FROM employeeExam x 
          JOIN employeeExam y 
            ON y.course_id = x.course_id 
           AND y.employee_id = x.employee_id 
           AND y.date <= x.date
         GROUP 
           BY id 
      ) b
     ON b.course_id = a.course_id
    AND b.employee_id = a.employee_id
    AND b.status = a.status
    AND b.rank = a.rank - 1
  WHERE a.status = 0;
于 2013-01-21T09:55:01.330 に答える
0

これを試してコメントしてください:

SQLFIDDLE デモ

set @sum:=0;
set @id:=0;     

select distinct x.empid, x.degree, x.date, x.status
from (
select @sum:= (case when status=0
               and @id = employee_id then @sum+1
               else 1 end)
as sm,  @id:=employee_id as empid, degree, date, status
from employeeexam
order by employee_id)x
where x.sm >= 2
;

| EMPID | DEGREE |                           DATE | STATUS |
------------------------------------------------------------
|     2 |      5 | January, 16 2013 00:00:00+0000 |      0 |
|     3 |      6 | January, 16 2013 00:00:00+0000 |      0 |
|     4 |     15 | January, 14 2013 00:00:00+0000 |      0 |
于 2013-01-20T14:38:33.507 に答える
0

原則を示すためのSQLコードのほんの一部ですが、要件を完全に拡張しているとは思えません。たとえば、このコードは連続して失敗した試行をチェックせず、一般的なすべての試行のみをチェックします。申請者がすでに試験に合格している行は表示されません。

たとえば、試験を受けてステータス 0, 0, 1, 0, 0 を取得する必要があります。申請者が少なくとも 1 つの試験に合格しているため、表示されません。

SELECT course_id, employee_id, MAX(degree), status, COUNT(id) NumExamsTaken
FROM employeeExam
GROUP BY course_id, employee_id
HAVING COUNT(id) >= 2 AND SUM(status) = 0;

SQL フィドル

于 2013-01-20T14:39:09.933 に答える