![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Есть база данных на SQL системы контроля доступа, состоящая из двух
таблиц users (информация о работниках) user_id name и таблица messagelog (информация о проходах работников) message_id user_id datetime (datetime) дата и время action_in (boolean) true = вход, false = выход Необходимо написать запрос (если такое возможно с помощью одного запроса) в котором для определенного работника показывается на каждый день время его прихода на работу и ухода (работники также могут неограниченное кол-во раз выходить и заходить на работу в течении дня) Дата Время входа Время выхода 01.12.2009 8:30:51 17:30:20 |
|
#2
|
||||
|
||||
|
Вроде так:
Код:
select datetime,action_id from messagelog m inner join users u on m.user_id=u.user_id where u.name='Иванов' order by m.datetime |
|
#3
|
|||
|
|||
|
не помогло. основной вопрос получения мин и максимального значения времени за каждый день. а за ответ по объединению таблиц спасибо
|
|
#4
|
|||
|
|||
|
Придется делать через подзапросы с группировкой по пользователю и дате, выдранной из поля с датой и временем. А вообще, для простоты сделай через вью. Во вью сделай через подзапросы получение user_id, даты (без времени) и макс и мин времени из даты. А запросом сделай получение имени пользователя.
PS. вот нет бы писать дату и время в 2 разныз поля... |
|
#5
|
|||
|
|||
|
пробую подзапросом
select min(m.datetime), max(m.datetime) from messagelog m where user_id=3 and CAST(FLOOR(CAST(m.datetime AS FLOAT)) AS DATETIME) IN (select distinct CAST(FLOOR(CAST(m1.datetime AS FLOAT)) AS DATETIME) from messagelog m1) group by m.datetime результата нет |
|
#6
|
|||
|
|||
|
Цитата:
|
|
#7
|
|||
|
|||
|
в результате экспериментов получилось примерно так
Код:
SELECT CAST(FLOOR(CAST(m1.Date AS FLOAT)) AS DATETIME) AS Expr1, m1.date AS vhod, m3.date AS vihod, (DATEDIFF(mi, '2009-25-11 08:30:44', m1.date)) AS opozdanie, (DATEDIFF (mi,'2009-25-11 18:30:44',m3.date)) AS dosuhod
FROM MessageLog m1 JOIN MessageLOG m3
ON CAST(FLOOR(CAST(m1.Date AS FLOAT)) AS DATETIME) = CAST(FLOOR(CAST(m3.Date AS FLOAT)) AS DATETIME)
WHERE
m1.userid=3
AND
m3.userid=3
AND
m1.date IN (SELECT MIN(m2.Date) AS Expr2
FROM MessageLog AS m2
WHERE CAST(FLOOR(CAST(m1.Date AS FLOAT)) AS DATETIME) = CAST(FLOOR(CAST(m2.Date AS FLOAT)) AS DATETIME) and userid=3)
AND
m3.date IN (SELECT MAX(m4.Date) AS Expr4
FROM MessageLog AS m4
WHERE CAST(FLOOR(CAST(m3.Date AS FLOAT)) AS DATETIME) = CAST(FLOOR(CAST(m4.Date AS FLOAT)) AS DATETIME) and userid=3)Теперь не могу совладать с получением кол-ва часов проведенных сотрудником на работе за каждый день Последний раз редактировалось Admin, 28.12.2009 в 15:05. |