![]() |
|
|
Регистрация | << Правила форума >> | 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. |