Ответов: 1 Просмотров: 1861
|
Приветствую!
Точно решение написать не смогу. Только предложить вариант.
написать пару функций mysql например
--считать общее время отсутствия на работе
create function calc_user(in user_id INT(11), in date_calc DATE) returns int(11)
begin
declare _num_rows, _direction, i INT default 0;
declare _time, _total_time TIME default '00:00';
declare user_cur cursor for
select calc_time(ptime, direction) as time, direction from billing where user_id = in_user_id and pdate = date_calc;
open user_cur ;
select found_rows() into num_rows;
users_loop: LOOP
fetch user_cur into _time, _direction;
-- дальше что-то высчитываем. можно еще хранить значение предыдущего _time и _direction для сравнения.
set i = i +1;
if(i>=num_rows) then
leave users_loop;
close user_cur;
end if;
return _total_time;
end;
-- возвращает фактическое время, заменяя то, что до 7:45 на 7:45, что после 18:00 на 18:00 итд.
create function calc_time(in ptime time, in direction int(11)) returns int(11)
begin
if(ptime < 7:45 and direction = 1) return 7:45 -- честно говоря, точно не знаю как время правильно указать
...
end;
если все это получится - в конце можно будет написать запрос и вернутся все данные уже рассчитанные:
select employee_id, pdate, calc_user(employee_id, pdate) as usertime from billing;
PS. Отпиши пжл, как задачу решишь, интересно. Удачи |