Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как сделать запрос - смена работы диспетчера ? / 13 сообщений из 13, страница 1 из 1
25.09.2004, 19:25:36
    #32711653
nukri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать запрос - смена работы диспетчера ?
Здравствуйте

Нужен совет ... конечно будет хорошо если кто-нить еще и напишет как составить след. запрос:

есть таблица заполняется диспетчерами

в нее идет дата (Д), фамилия диспетчера (Ф) и отпущено столько-то (О)


например с 31 августа 8.00 (СМЕНА НАЧАЛО) до 1 сентября 5.45 (СМЕНА КОНЕЦ) работает Иванов И.И.
в таблицу попадают данные:
Д = 31.08.2004 8:23:20 , Ф = Иванов И.И., О = 23
Д = 31.08.2004 12:12:10 , Ф = Иванов И.И., О = 12
Д = 01.09.2004 2:15:10 , Ф = Иванов И.И., О = 5
..................................

далее с 1 сентября 6.12 до 22 сентября 11.30 работает Петров С.Ф.
...................
далее ... опять Иванов
..........................
потом еще кто-то
........................

Нужен запрос который сложит с Начала смены до Конца смены все что сделал Иванов

И другие диспетчера

Группируя только по смене которая фактически определяется изменением имени диспечтера ....
...
Рейтинг: 0 / 0
25.09.2004, 23:55:37
    #32711722
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать запрос - смена работы диспетчера ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select min(d) as nachalosmeny, f, sum(o) as summa from (
    select t_3.d, t_3.f, t_3.o, nz(sum(q2.n), 0 ) as s from
    t as t_3 left join (
        select q1.d, q1.f<>t_2.f as n from (
            select t.d, t.f, max(t_1.d) as dprev from
            t left join t as t_1 on t.d>t_1.d group by t.d, t.f
        ) as q1 left join t as t_2 on q1.dprev=t_2.d
    ) as q2 on t_3.d>=q2.d group by t_3.d, t_3.f, t_3.o
) as q3 group by s, f

Чувствую, что коряво и что сейчас придет VIG и сделает на порядок короче. Но это работает.
...
Рейтинг: 0 / 0
26.09.2004, 00:00:47
    #32711723
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать запрос - смена работы диспетчера ?
Идея в следующем. Первый селект (если идти изнутри) находит время предыдущей записи. Второй - проверяет фамилию предыдущего диспетчера и помечает места, где она изменилась. Третий подсчитывает, сколько раз сменилась фамилия диспетчера с начала истории до данного момента (это количество раз остается постоянным до следующей пересменки, значит на его основании можно узнать, какие записи относятся к той же смене). Четвертый выдает нужные результаты, группируя записи по смене.
...
Рейтинг: 0 / 0
26.09.2004, 03:02:00
    #32711748
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать запрос - смена работы диспетчера ?
Интересная задачка. Непонятно только, зачем доводить базу до рождения таких задачек?

Получилось сделать на 1 селект меньше:
Код: plaintext
1.
2.
3.
SELECT f, sm, Sum(o) AS summ
FROM   (SELECT  f, (select max(d) from t as a where a.d<b.d and a.f<>b.f) AS sm, o
        FROM t AS b) AS q
GROUP BY f, sm;
...
Рейтинг: 0 / 0
26.09.2004, 03:27:40
    #32711752
nukri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать запрос - смена работы диспетчера ?
Гео, а как-бы вы сделали смены ?
...
Рейтинг: 0 / 0
26.09.2004, 03:38:11
    #32711755
nukri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать запрос - смена работы диспетчера ?
Вся фишка в том, что диспетчера народ очень непостоянный и прыгают по времени совсем сложным способом ... а мне надо знать их наработку посменно причем привязанну. к суткам .... и что тут делать ?

Вот я и стал " тупо в лоб" ....
...
Рейтинг: 0 / 0
26.09.2004, 12:57:03
    #32711816
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать запрос - смена работы диспетчера ?
Что значит к суткам? Если к суткам, то нет ничего проще:

Код: plaintext
SELECT CVDate(Int(d)) AS den, f, Sum(o) AS s FROM t GROUP BY Int(d), f;
...
Рейтинг: 0 / 0
26.09.2004, 13:15:41
    #32711822
nukri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать запрос - смена работы диспетчера ?
неее .. "к суткам" - э то значит, что диспетчер может работать и меньше суток и больше но в любом случае его работу надо привязать сутке так, чтобы если он работал например с 1-го 8 утра по 2-е 5 утра то его данные выбирались как за 1-е число.
...
Рейтинг: 0 / 0
26.09.2004, 13:27:25
    #32711826
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать запрос - смена работы диспетчера ?
А если он работал так:

с 1 числа 23:00 по 2 число 02:00
с 2 числа 11:00 по 2 число 13:00
с 2 числа 22:00 по 3 число 01:00

то куда привязывать? Есть ли правила?
...
Рейтинг: 0 / 0
26.09.2004, 13:50:04
    #32711832
nukri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать запрос - смена работы диспетчера ?
Значит так подумал и все-таки решил собрать все в рамки

Начался месяц в ~ 8 (+- 5 часов) (1 сентября) утра пришел диспетчер и начала свои сутки и они так длятся до 2-го сентября (~ 8 утра +- 5 часов)

Тоесть все данные за этот период надо отнести к 1-му сентября

и т.д.

Более или жесткая привязка - это фамилия диспетчера т.к. подряд смен с думя одинаковыми диспетчерами не бывает...

А я не совсем понимаю как в селекте ловить этот переход с фамилией ...

Сейчас мучаю ваши идеи но просто не совсем доходит

В любом случае спасибо!
...
Рейтинг: 0 / 0
26.09.2004, 13:54:48
    #32711834
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать запрос - смена работы диспетчера ?
nukriНачался месяц в ~ 8 (+- 5 часов) (1 сентября) утра пришел диспетчер и начала свои сутки и они так длятся до 2-го сентября (~ 8 утра +- 5 часов)

Тоесть все данные за этот период надо отнести к 1-му сентября
Но это не алгоритм. Это значит, что надо сначала получить все данные перед глазами, а потом руками решать, что относится к каким суткам.

nukriА я не совсем понимаю как в селекте ловить этот переход с фамилией ...
В моем посте от 00:00 написано.
...
Рейтинг: 0 / 0
26.09.2004, 14:40:30
    #32711846
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать запрос - смена работы диспетчера ?
2 nurki
Во-первых, меня не больше, чем Владимиров Санычей, а возможно, что и меньше Поэтому я - "ты", а не "вы". :))

Как бы я сделал? Не знаю, но, наверное, генерил бы номер смены при вводе данных, чтобы потом не пришлось рисовать такие долгоиграющие запросы.

2ВС
> В моем посте от 00:00 написано.
Или в моем от 03:02 ;))
(это ж надо, до скольки вчера колобродил я:))
---
Жизнь хороша, и жить хорошо! :)
...
Рейтинг: 0 / 0
26.09.2004, 15:09:48
    #32711858
nukri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать запрос - смена работы диспетчера ?
Владимир Саныч
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select min(d) as nachalosmeny, f, sum(o) as summa from (
    select t_3.d, t_3.f, t_3.o, nz(sum(q2.n), 0 ) as s from
    t as t_3 left join (
        select q1.d, q1.f<>t_2.f as n from (
            select t.d, t.f, max(t_1.d) as dprev from
            t left join t as t_1 on t.d>t_1.d group by t.d, t.f
        ) as q1 left join t as t_2 on q1.dprev=t_2.d
    ) as q2 on t_3.d>=q2.d group by t_3.d, t_3.f, t_3.o
) as q3 group by s, f

Чувствую, что коряво и что сейчас придет VIG и сделает на порядок короче. Но это работает.

Саныч спасибо! Запрос заработал (что в принципе и должно было произойти)


Блин сколько времени должно пройти, чтобы такой запрос с пол-пинка научится писать ? ))
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как сделать запрос - смена работы диспетчера ? / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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