Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Помогите с запросом плс., выборка макс. и мин. времени, Paradox / 8 сообщений из 8, страница 1 из 1
07.08.2007, 09:44
    #34709483
AKab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом плс., выборка макс. и мин. времени, Paradox
Доброго времени суток.
Есть таблица Paradox в виде:
дататаб.номервремяфлаг01.01.20073008:50:34вход01.01.20073008:55:35выход01.01.20073009:50:34вход01.01.20073017:04:34выход
Нужен запрос в котором будут записи на каждый день и на каждый табельный номер, первый вход и последний выход.
т.е. я знаю как получить допустим все первые входы:
SELECT mDATE,mTN,MIN(mTIME) FROM my_base
WHERE mDATE>='01.01.2007' AND mDATE<='31.01.2007' AND mFLAG='вход' GROUP BY mDATE,mTN
соответственно могу найти и последний выход.
А вот как все это объединить в одном запросе? причем не обязательно в течении суток будет вход и выход (ночные смены и пр.) - т.е. там должен быть просто 0
...
Рейтинг: 0 / 0
12.08.2007, 22:58
    #34722505
Пушок
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом плс., выборка макс. и мин. времени, Paradox
вскрать табличку дважды
my_base b1, my_base b2
...
Рейтинг: 0 / 0
13.08.2007, 08:11
    #34722690
Nike85
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом плс., выборка макс. и мин. времени, Paradox
To Akab:
может так? только дату поставь в своем формате (я проверял на первазиве):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT MAX(mTIME) as Timeaccess,mDATE,mTN,mFLAG FROM my_base
WHERE mDATE>='2007-01-01' AND mDATE<='2007-01-31' 
AND (mFLAG='выход') 
GROUP BY mDATE,NORDER,vidorder
union 
SELECT Min(mTIME) as Timeaccess,mDATE,mTN,mFLAG FROM my_base
WHERE mDATE>='2007-01-01' AND mDATE<='2007-01-31' 
AND (mFLAG='вход') 
GROUP BY mDATE,NORDER,vidorder
...
Рейтинг: 0 / 0
13.08.2007, 08:19
    #34722701
Nike85
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом плс., выборка макс. и мин. времени, Paradox
Только группировку не по NORDER, vidorder, а по mTN,mFlag . Сорри ;))
Еще раз - дату в своем формате выставь
...
Рейтинг: 0 / 0
13.08.2007, 16:15
    #34724251
AKab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом плс., выборка макс. и мин. времени, Paradox
Дело в том, что через union я получу просто объединение 2 запросов, т.е. будут отдельно записи с входами и отдельно с выходами. А мне надо получить записи с 2 столбцами: 1-первый вход, 2-последний выход
...
Рейтинг: 0 / 0
14.08.2007, 08:28
    #34725273
Nike85
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом плс., выборка макс. и мин. времени, Paradox
Может вот так тогда:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT MAX(mTIME) as Timeaccess,m2.TimeAccess1,mDATE,mTN,mFLAG FROM my_base m1
Left join
      (SELECT Min(m3.mTIME) as Timeaccess1,m3.mDATE, m3.mTN, m3.mFLAG FROM my_base m3
       WHERE m3.mDATE>='2007-01-01' AND m3.mDATE<='2007-01-31' 
       AND (m3.mFLAG='вход') 
       GROUP BY m3.mDATE, m3.mTN, m3.mFLAG)
       m2 on m1.mTN=m2.mTN

WHERE m1.mDATE>='2007-01-01' AND m1.mDATE<='2007-01-31' 
AND (m1.mFLAG='выход') 
GROUP BY m1.mDATE,m1.mTN,m1.mFLAG,TimeAccess1
...
Рейтинг: 0 / 0
14.08.2007, 11:22
    #34725760
AKab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом плс., выборка макс. и мин. времени, Paradox
Немного начинаю разибраться, следующий запрос выводит то, что нужно:
Код: plaintext
1.
2.
3.
select m.mdate,m.mtn,min(i.mtime),max(o.mtime) from my_base m
left join my_base i on m.mdate=i.mdate and m.mtn=i.mtn and i.mflag='вход'
left join my_basr o on m.mdate=o.mdate and m.mtn=o.mtn and o.mflag='выход'
where m.mdate>='12.08.2007' and m.mdate<='12.08.2007' group by mdate,mtn
Но проблема в том, что выборка данных занимает минут 10-15, хотя все поля проиндексированны (индекс: mdate,mtn,mtime,mflag)
Но самое, что интересное запрос вида:
Код: plaintext
1.
2.
3.
select m.mdate,m.mtn,min(i.mtime),max(o.mtime) from my_base m
left join my_base i on m.mdate=i.mdate and m.mtn=i.mtn
left join my_basr o on m.mdate=o.mdate and m.mtn=o.mtn
where m.mdate>='12.08.2007' and m.mdate<='12.08.2007' group by mdate,mtn
т.е. без флага работает моментально, но при этом нет пустых полей (если был вход/выход - то все нормально, если нет входа то в обоих полях время последнего выхода и наоборот)

Не подскажете куда копать в сторону оптимизации запроса?
...
Рейтинг: 0 / 0
17.08.2007, 20:07
    #34735895
AKab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом плс., выборка макс. и мин. времени, Paradox
Уезжаю в отпуск, буду 3 сентября, либо 17 только, с нетерпением жду Ваших советов по оптимизации запроса
...
Рейтинг: 0 / 0
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Помогите с запросом плс., выборка макс. и мин. времени, Paradox / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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