3

employeexamどの構造とデータが次のようになっているのかというテーブルがあります。

--------------------------------------------------------
| id | course_id   | employee_id | degree | date
--------------------------------------------------------
| 1  |  1          | 3           | 8      | 2013-01-14
| 2  |  2          | 4           | 15     | 2013-01-14
| 3  |  2          | 4           | 17     | 2013-01-15
--------------------------------------------------------

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

---------------------------------------------------------------------------
| id | course_id   | employee_id | degree | date        | numOfTakingExams 
---------------------------------------------------------------------------
| 1  |  1          | 3           | 8      | 2013-01-14  | 1
| 3  |  2          | 4           | 17     | 2013-01-15  | 2
---------------------------------------------------------------------------

私のMySQLクエリ:

SELECT DISTINCT(employeexam.employee_id) as employeeid, 
                employeexam.*, 
                exam.numOfTakingExams 
     FROM employeexam
     JOIN (
            SELECT employee_id , COUNT(employee_id ) as numOfTakingExams 
            FROM employeexam  
            GROUP BY employee_id
          ) exam
     ON exam.employee_id  = employeexam.employee_id 
     ORDER BY employeexam.id DESC   

これnumOfTakingExamsは正しく値を出力しますが、彼が最後に試験に参加したときのデータだけを選択することはできません。何か助けはありますか?

4

5 に答える 5

2
SELECT  a.*, b.numOfTakingExams
FROM    employeeExam a
        INNER JOIN
        (
            SELECT  employee_id,
                    MAX(date) max_Date,
                    COUNT(*) numOfTakingExams 
            FROM    employeeExam
            GROUP BY course_ID, employee_id
        ) b ON  a.employee_id = b.employee_id AND
                a.date = b.max_Date

IDとして設定されている場合は、最大で最新のレコードを取得することもできAUTO_INCREMENTます。以下のこのクエリは、上記のクエリと同じ結果を生成します。

SELECT  a.*, b.numOfTakingExams
FROM    employeeExam a
        INNER JOIN
        (
            SELECT  employee_id,
                    MAX(id) max_Date,
                    COUNT(*) numOfTakingExams 
            FROM    employeeExam
            GROUP BY course_ID, employee_id
        ) b ON  a.employee_id = b.employee_id AND
                a.id = b.max_Date
于 2013-01-15T12:57:01.310 に答える
1

このクエリを試してください-

SELECT
  t1.id, t1.course_id, t1.employee_id, t1.degree, t1.date, t2.numOfTakingExams
FROM
  mployeexam t1
  JOIN (
        SELECT employee_id, MAX(date) date, COUNT(*) numOfTakingExams
        FROM mployeexam
        GROUP BY employee_id
    ) t2
    ON t1.employee_id = t2.employee_id AND t1.date = t2.date
于 2013-01-15T12:58:03.130 に答える
1

自分で参加してみましたか?最初に「最後の試験」を含むIDを選択し、2番目に必要なものに参加します。次のようなもの:

select A.* FROM
employeexam A INNER JOIN (
    SELECT EMPLOYEE_ID, MAX(DATE)
    FROM EMPLOYEEXAM
    GROUP BY EMPLOYEE_ID
) B
ON A.EMPLOYEE_ID = B.EMPLOYEE_ID AND
A.DATE = B.DATE

もちろん、Employee_idごとの日付が一意であると仮定します。

于 2013-01-15T13:03:19.867 に答える
0
SELECT  ee.*, num_exams
FROM    (
        SELECT  employee_id, COUNT(*) AS num_exams
        FROM    employeexam
        GROUP BY
                employee_id
        ) eed
JOIN    employeeexam ee
ON      ee.id =
        (
        SELECT  id
        FROM    employeeexam eei
        WHERE   eei.employee_id = eed.employee_id
        ORDER BY
                eei.employee_id DESC, eei.date DESC, eei.id DESC
        LIMIT 1
        )

これにより、1つの日に複数の試験が行われた場合に正しく処理されます。

于 2013-01-15T13:01:47.640 に答える
0
SELECT x.*
     , y.ttl
  FROM employeexam x 
  JOIN 
     ( SELECT course_id
            , employee_id
            , MAX(date) max_date
            , COUNT(*) ttl 
         FROM employeexam 
        GROUP 
           BY course_id
            ,employee_id
     ) y 
    ON y.course_id = x.course_id 
   AND y.employee_id = x.employee_id 
   AND y.max_date = x.date;
于 2013-01-15T13:09:42.900 に答える