Обновление таблицы с помощью расчета на основе MAX из другой таблицы - PullRequest
2 голосов
/ 06 марта 2012

Я создал таблицу (Attendance) для хранения вычислений, и я обновляю таблицу, чтобы заполнить большинство вычислений.Мне нужно выяснить, когда сотрудник (EMP_NB) ушел с работы на день.Это рассчитывается как TIMEDIFF(ADDTIME(PERIOD, '1:00'), SEC_TO_TIME(Activity_Secs)).

Моя проблема в том, что я не могу найти способ получить МАКС (ПЕРИОД) за EMP_NB за ДАТУ, а также получить соответствующий Activity_Secs.

таблица A

╭────────┬──────┬────────┬───────────────╮
│ EMP_NB │ DATE │ Period │ Activity_Secs │
╰────────┴──────┴────────┴───────────────╯

Вот код MySQL, который я сделал, чтобы получить первый период, когда сотрудник вошел в систему.

UPDATE calc_Attendance AS att, tableA AS a
JOIN (
        SELECT 
        EMP_NB,
        DATE,
        Period,
        Activity_Secs
        FROM tableA
        GROUP BY EMP_NB, DATE, Period
    ) m
ON a.EMP_NB = m.EMP_NB and a.DATE = m.DATE and a.Period = m.Period
SET DEPTARTURE_ACTUAL = TIMEDIFF(ADDTIME(m.Period, '1:00'), SEC_TO_TIME(m.Activity_Secs))
WHERE att.EMP_NB = m.EMP_NB AND att.DATE = m.DATE
;

Любая помощь будет принята с благодарностью.У меня нет большого опыта работы с SQL, так что это сводит меня с ума.

Ответы [ 2 ]

0 голосов
/ 06 марта 2012

Не уверен относительно цели tableA в вашем запросе, но я думаю, что следующее должно работать.

UPDATE calc_Attendance AS att
JOIN (
    SELECT *
    FROM (
        SELECT EMP_NB, DATE, Period, Activity_Secs
        FROM tableA
        ORDER BY Period DESC
    ) m1
    GROUP BY EMP_NB, DATE
) m
ON att.EMP_NB = m.EMP_NB and att.DATE = m.DATE
SET DEPTARTURE_ACTUAL = TIMEDIFF(ADDTIME(m.Period, '1:00'), SEC_TO_TIME(m.Activity_Secs));
0 голосов
/ 06 марта 2012
UPDATE calc_Attendance AS att, tableA AS a
JOIN (
        SELECT 
        EMP_NB,
        DATE,
        MAX(Period) AS Period,
        Activity_Secs
        FROM tableA
        GROUP BY EMP_NB,DATE,Activity_Secs
    ) m
ON a.EMP_NB = m.EMP_NB and a.DATE = m.DATE and a.Period = m.Period
SET DEPTARTURE_ACTUAL = TIMEDIFF(ADDTIME(m.Period, '1:00'), SEC_TO_TIME(m.Activity_Secs))
WHERE att.EMP_NB = m.EMP_NB AND att.DATE = m.DATE
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...