Как написать запрос

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Аватара пользователя
AiK
Сообщения: 2287
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

Это нормально.
Вполне. Если у тебя всреднем 1 запись на работника в день, то ты сначала 1700*178 записей преобразуешь к нужному виду даты, а потом сверяешь со 178 записей во вьюхе, которые, кстати, тоже получаются довольно гиморно - преобразование даты плюс distinct.
Т.е. даже если ты по совету Oscar'а создашь две временные таблицы, то сервер будет выполнять 53млн+ сравнений. При этом выиграв на скорости выборки, ты проиграешь на скорости заполнения этих таблиц. Может быть выигрыш в скорости выборки будет больше проигрыша на заполнении этих таблиц за счёт использования индексов, но вряд ли общее время существенно сократиться.

И отвлечённый вопрос: какой несчастный будет обречён просматривать 300 с лишним тысяч записей? Которые кстати с сервера ты не быстро выфетчишь.
Даже самый дурацкий замысел можно воплотить мастерски
Viktor Zull
Сообщения: 117
Зарегистрирован: 10 ноя 2005, 02:00

Попробовал я сделать временные таблицы. Скорость совсем другая, гораздо быстрее работает. Не знаю сколько там сервер делает вычислений но то что запрос выполняется быстрее это точно.
Viktor Zull
Сообщения: 117
Зарегистрирован: 10 ноя 2005, 02:00

У меня вот еще что:

Есть 2 таблицы: первая такого типа:
Номер работника, Дата

1 01.01.05
2 01.01.05
3 01.01.05
1 02.01.05
2 02.01.05
3 02.01.05
1 03.01.05
2 03.01.05
3 03.01.05

вторая: Номер работника, дата1, дата2

1 01.01.05 01.01.05
1 01.01.05 02.01.05
2 02.01.05 03.01.05
3 02.01.05 06.01.05

Из таблицы 1 нужно получить список тех работников у которых дата из первой таблицы находится в диапазоне Даты1 и даты2 из второй таблице.
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

даты в каком формате?

если в человеческом (YYYY-MM-DD), то

WHERE table1.datum >= table2.datum1 AND table1.datum <= table2.datum2

если же нет - в МуСкле усть чудесная ф-ция, если надо - найду
Viktor Zull
Сообщения: 117
Зарегистрирован: 10 ноя 2005, 02:00

Даты в формате YYYY-MM-DD.
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

Дык какие проблемы?

Код: Выделить всё

SELECT table1.personID FROM table1, table2 WHERE table1.datum >= table2.datum1 AND table1.datum <= table2.datum2
Viktor Zull
Сообщения: 117
Зарегистрирован: 10 ноя 2005, 02:00

Проблем нет. Все работает. Спасибо.
Ответить