powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите пожалуйста !!!
11 сообщений из 11, страница 1 из 1
Помогите пожалуйста !!!
    #32783780
Vera Ivanova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне попалась, такая задача:
Необходимо написать запрос для получения списка сотрудников и числа их опозданий за месяц. Суббота и воскресенье выходные дни. В течение рабочего дня сотрудники могут ходить и выходить любое количество раз (таблица list_all). Время начала работы с 8-00.

Таблица list_all (журнал)
ID - уникальный номер записи в журнале
SUBJ_ID - идентификатор сотрудника
DT - дата и время
Priz - либо - Выход либо Вход
Des - примечание

Таблица subj (список сотрудников)
ID - уникальный идентификатор сотрудника
L_Name - имя
F_Name - фамилия

Помогите, пожалуйста !!!
...
Рейтинг: 0 / 0
Помогите пожалуйста !!!
    #32784001
Владимор Конев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это не ОНО:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select subj.id,
       subj.L_name,
       subj.F_name,
       nvl(count(dt_delay), 0 ) count_of_delay
  from subj,
       (  
          select min(dt) dt_delay, subj_id
            from list_all
           where to_char(dt,'day','nls_language=russian') not in ('суббота','воскресенье')
           -- далее необходимо указать корректные значения
           -- временного интервала для Ваших данных:
             and list_all.dt between to_date('01.11.2004 00:00:00','dd.mm.yyyy hh24:mi:ss')
                                 and to_date('30.11.2004 23:59:59','dd.mm.yyyy hh24:mi:ss')
           -- в этом месте нужно проставить соответсвующий признак "ВХОД":
           /*and list_all.priz = 'ВХОД'*/
          group by trunc(dt), subj_id
          having to_char(min(dt),'hh24:mi:ss') > '08:00:00'
       ) v
 where v.subj_id(+) = subj.id
group by subj.id,
         subj.L_name,
         subj.F_name

???
...
Рейтинг: 0 / 0
Помогите пожалуйста !!!
    #32784070
Фотография ditbunau
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот мой запрос по опоздавшим, в моей системе. Переделаешь под свою.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select personal.tabel_num,personal.family||''||personal.name||''||personal.secname,personal.position,
a.ti, b.tm

from
(select id_personal, p.id_smena, TO_DATE('12.07.04 '||start_sm,'dd.mm.yy HH24:MI')  ti from pass_d_sm p,smena sm
where p.id_smena=sm.id_smena and p.id_smena> 0  and p.id_smena!= 5   and DAY=TO_DATE('12.07.2004','DD.MM.YYYY')) a,

(select id_p,min(z_time) tm from admin.t12072004  where EVENT='I'group by id_p) b, 

personal, department 
where a.ti < b.tm 
and a.id_personal=b.id_p 
and a.id_personal=personal.id_personal 
and personal.id_dep=department.id_dep

В таблице Personal - сотрудники, там есть ID_PERSONAL, Family, Name, Sec_Name, Position.
В подзапросе А выбираем, когда должен был прийти в данный день сотрудник, но это тебе не надо, т.к. вход с 8.00 В подзапросе B выбираем первый вход сотрудника из таблицы T12072004 (на 12 июля 2004 года)- подобная твоей таблица с такими же реквизитами. Затем сравниваем вход и начало смены (8.00) Если позже - опоздал.

Вот и все!
...
Рейтинг: 0 / 0
Помогите пожалуйста !!!
    #32784168
_kain_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ditbunauВот мой запрос по опоздавшим, в моей системе. Переделаешь под свою.И желательно ЦЕЛИКОМ!
Ужас какой.
2 Владимор Конев зачем subj с собой джойнить? Если она большая, не самый оптимальный запрос получится. Есть отличная функция CASE.
...
Рейтинг: 0 / 0
Помогите пожалуйста !!!
    #32784201
Владимор Конев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_kain_
2 Владимор Конев зачем subj с собой джойнить? Если она большая, не самый оптимальный запрос получится. Есть отличная функция CASE.

Это было, так сказать, решение на скорую руку - что первое в голову пришло, то и написал. Ведь человеку главное дать пищу для размышлений. А дальше, если у него есть своя голова на плечах, он разберётся что к чему...
...
Рейтинг: 0 / 0
Помогите пожалуйста !!!
    #32784220
Владимор Конев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_kain_
2 Владимор Конев зачем subj с собой джойнить? Если она большая, не самый оптимальный запрос получится. Есть отличная функция CASE.
Корме того, погляди на запрос ещё раз очень внимательно - там нигде нет джойна таблицы SABJ с самой сабой... :-)
Если внимательно посмотреть, то видно, что там есть встроенное представление V. В нем формируется список всех опозданий каждого сотрудника за заданный интервал времени. И имено это встроенное представление соединяется с таблице SUBJ. :-)
Или я чего-то не понимаю в собственном запросе???
...
Рейтинг: 0 / 0
Помогите пожалуйста !!!
    #32784535
Фотография ditbunau
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_kain_ ditbunauВот мой запрос по опоздавшим, в моей системе. Переделаешь под свою.И желательно ЦЕЛИКОМ!
Ужас какой.
2 Владимор Конев зачем subj с собой джойнить? Если она большая, не самый оптимальный запрос получится. Есть отличная функция CASE.

Идея-то та же, только названия таблиц разные. Главное - ИДЕЯ!
...
Рейтинг: 0 / 0
Помогите пожалуйста !!!
    #32785519
Vera Ivanova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
БОЛЬШОЕ СПАСИБО, Владимор Конев и ditbunau !!!
Вы очень мне помогли !!!
...
Рейтинг: 0 / 0
Помогите пожалуйста !!!
    #32785529
Владимор Конев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vera IvanovaБОЛЬШОЕ СПАСИБО, Владимор Конев и ditbunau !!!
Вы очень мне помогли !!!

Ну, форумы для этого и существуют...

Вот только у меня в запросе небольшая ошибочка закралась.
вместо строки
Код: plaintext
 where to_char(dt,'day','nls_language=russian') not in ('суббота','воскресенье')
нужно писать строку
Код: plaintext
 where to_char(dt,'fmday','nls_language=russian') not in ('суббота','воскресенье')
То есть, при извлечечнии дня ('day') необходимо было избавиться от пробелов в конце строки ('fmday').
В противном случае субботы не будут исключаться из рассмотрения.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Помогите пожалуйста !!!
    #39845984
дипер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимор Конев,

Добрый день!

Разбирал данный пример и получился следующий запрос в MySQL

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT UCASE (subj.F_Name ),
TIME (list_al.dt),
COUNT(subj.F_Name ),	
list_al.priz	

FROM list_al

INNER JOIN subj ON list_al.subj_id = subj.id
WHERE list_al.priz = 'Вход' AND
TIME(list_al.dt) > '08:00:00'

GROUP BY subj.F_Name 



Подскажите, пожалуйста, как вы отфильтровали несколько входов за день?

У меня получается, что один из сотрудников несколько раз за день выходит и входит. Это не считается прогулом, а ему подает на счет, как прогул.
...
Рейтинг: 0 / 0
Помогите пожалуйста !!!
    #39846549
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дипер,

Есть опасения, что ответивший 15 лет назад и заходивший последний раз 13 лет назад на форум автор вам не ответит.
Тем более, что вопрос по реализации в MySQL не по тематике данной ветки форума.

Попробуйте всё-таки взяться за ум и попробовать осознать, что делает решение 15-ти летней давности.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите пожалуйста !!!
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]