簡體   English   中英

在以下兩行中獲得一列值相同的結果

[英]get result where one column value is identical in two following rows

我想從employeeExam表中選擇失敗的雇員,其中以下兩行的status列等於0

結果應該是這樣的:

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

這是我所做的:
SQL小提琴

為了進一步說明:按id排序時,結果應僅包含彼此之間具有相同course_idemployee_idstatus = 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 |

盡管我懷疑它是否完全擴展了您的要求,但僅顯示一部分SQL代碼即可顯示該原理。 例如,此代碼不會檢查連續失敗的嘗試,而只會檢查所有嘗試。 它不會顯示申請人已經通過考試的任何行。

因此,例如:一個人應該參加考試並獲得狀態0,0,1,0,0; 它不會顯示,因為申請人至少通過了一項考試。

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小提琴

 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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM