2016-08-15 3 views
2

У меня есть таблица истории состояния, которая также включает в себя будущие записи.Получить последнюю запись для каждого сотрудника старше установленной даты

Пример: employee_jobs

id | employee_id | division_id | department_id | job_id | effective_date 
1  100   1    1    1  2015-01-01 
2  100   1    1    2  2016-01-01 
3  100   1    2    4  2017-01-01 
4  200   1    3    5  2016-01-01 
5  300   1    3    6  2015-01-01 
6  300   1    3    7  2016-05-25 

Мне нужен брикетирования SQL, который будет показывать текущую концертную запись данной EMPLOYEE_ID, когда дается дата: Пример Date = 2016-08-15

Набор результат должен быть :

id | employee_id | division_id | department_id | job_id | effective_date 
2  100   1    1    2  2016-01-01 
4  200   1    3    5  2016-01-01 
6  300   1    3    7  2016-05-25 
+0

Как вы определяете 'просматриваемого record'? – 1000111

ответ

0

Я предполагаю, что вы хотите записи для каждого сотрудника, имеющих самую последнюю effective_date с ограничением

(effective_date должен быть меньше или равен заданной дата)

SELECT 
* 
FROM 
(
    SELECT 
    *, 
    IF(@sameEmployee = employee_id, @rn := @rn + 1, 
     IF(@sameEmployee := employee_id, @rn := 1, @rn := 1) 
    ) AS row_number 
    FROM employee_jobs 
    CROSS JOIN (SELECT @sameEmployee := 0, @rn := 1) var 
    WHERE effective_date <= '2016-08-15' 
    ORDER BY employee_id, effective_date DESC 
) AS t 
WHERE t.row_number = 1 
ORDER BY t.employee_id 
Смежные вопросы