powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Помогите с запросом плс., выборка макс. и мин. времени, Paradox
8 сообщений из 8, страница 1 из 1
Помогите с запросом плс., выборка макс. и мин. времени, Paradox
    #34709483
AKab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
Есть таблица 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
Помогите с запросом плс., выборка макс. и мин. времени, Paradox
    #34722505
Пушок
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вскрать табличку дважды
my_base b1, my_base b2
...
Рейтинг: 0 / 0
Помогите с запросом плс., выборка макс. и мин. времени, Paradox
    #34722690
Nike85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Помогите с запросом плс., выборка макс. и мин. времени, Paradox
    #34722701
Nike85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Только группировку не по NORDER, vidorder, а по mTN,mFlag . Сорри ;))
Еще раз - дату в своем формате выставь
...
Рейтинг: 0 / 0
Помогите с запросом плс., выборка макс. и мин. времени, Paradox
    #34724251
AKab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело в том, что через union я получу просто объединение 2 запросов, т.е. будут отдельно записи с входами и отдельно с выходами. А мне надо получить записи с 2 столбцами: 1-первый вход, 2-последний выход
...
Рейтинг: 0 / 0
Помогите с запросом плс., выборка макс. и мин. времени, Paradox
    #34725273
Nike85
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может вот так тогда:
Код: 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
Помогите с запросом плс., выборка макс. и мин. времени, Paradox
    #34725760
AKab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Немного начинаю разибраться, следующий запрос выводит то, что нужно:
Код: 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
Помогите с запросом плс., выборка макс. и мин. времени, Paradox
    #34735895
AKab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уезжаю в отпуск, буду 3 сентября, либо 17 только, с нетерпением жду Ваших советов по оптимизации запроса
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Помогите с запросом плс., выборка макс. и мин. времени, Paradox
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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