На работе были поставлены следующие задачи:
- Учет рабочего времени по тикетам;
- Учет рабочего времени по дням (Получить по каждому сотруднику отработанные часы начиная с заданного за каждый рабочий день);
Отчет по дням
[sql]
SELECT DATE_FORMAT( FROM_UNIXTIME( starttime
) , "%d %M %Y" ) AS Дата
SEC_TO_TIME(SUM((TIMESTAMPDIFF(SECOND , FROM_UNIXTIME(`starttime`) , FROM_UNIXTIME( `endtime`))))) AS 'Отработано',
ticket
FROM work_log
WHERE FROM_UNIXTIME( starttime
) >= 'year-mont-day' AND ( endtime
) <> 0
GROUP BY ticket, Дата
ORDER BY DATE_FORMAT( FROM_UNIXTIME(starttime
) , "%d %M %Y" ) DESC
[/sql]
Отчет по тикетам
Создаем временную таблицу, в которую заносим затраченное время на тикет и номер тикета
[sql]CREATE TEMPORARY TABLE tmp (spent TIME, ticket INT(11));[/sql]
Добавляем во временную таблицу значения потраченно времени и номер тикета
[sql]
INSERT INTO tmp
SELECT
SEC_TO_TIME(SUM((TIMESTAMPDIFF(SECOND , FROM_UNIXTIME(`starttime`) , FROM_UNIXTIME( `endtime`))))) as spent,
ticket
FROM work_log
WHERE FROM_UNIXTIME( starttime
) >= '2013-06-17' AND ( endtime
) <> 0
GROUP BY ticket
ORDER BY DATE_FORMAT( FROM_UNIXTIME(starttime
) , "%d %M %Y" ) DESC;
[/sql]
Обновляем таблицу ticket_custom с учетом данных временной таблицы
[sql]
UPDATE ticket_custom
AS tc, tmp
AS t SET tc.value = t.spent WHERE tc.ticket = t.ticket AND tc.name = 'tt_spent';[/sql]
Выводим данные для проверки
[sql]SELECT * FROM ticket_custom[/sql]
Прошлые записи
- Jvm Internals - Перевод
- Мозг против живота или насколько трудно управлять своей жизнью
- Творческий отпуск
- Telegram бот на Rust, два, три и Raspberry Pi 2
- Мысли насчет ChatGPT
- Mashinka на Rust. Первые впечатления.
- Перевод - Почему бумага формата А4 имеет размер 297 мм на 210 мм?
- Эволюция веб-приложений. От раздачи статики до Serverless
- Эволюция веб-приложений. От статичного HTML до Single Page Application и Progressive Web Application
- Переезд в Калининград
- Была ли спецоперация на Украине неизбежна?