|
выборка последнего движения
|
|||
---|---|---|---|
#18+
Есть 2 таблицы справочник сотрудников K1 и движения сотрудников K2, хочется получить список сотрудников с данними только последнего движения. собственно в фоксе я бы назначить отношение по обратному индексу даты движения и scan по справочнику - набрал бы нужные данные. однако хочется сделать select-sql казалось бы: Код: plaintext 1.
подскажите пожалуйста как бы сделать такую выборку? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 11:18 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
АлексейОЕсть 2 таблицы справочник сотрудников K1 и движения сотрудников K2, хочется получить список сотрудников с данними только последнего движения. собственно в фоксе я бы назначить отношение по обратному индексу даты движения и scan по справочнику - набрал бы нужные данные. однако хочется сделать select-sql казалось бы: Код: plaintext 1.
подскажите пожалуйста как бы сделать такую выборку? Top обычно идет сразу за словом select, а не где-то там в конце запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 11:29 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
АлексейОЕсть 2 таблицы справочник сотрудников K1 и движения сотрудников K2, хочется получить список сотрудников с данними только последнего движения. собственно в фоксе я бы назначить отношение по обратному индексу даты движения и scan по справочнику - набрал бы нужные данные. однако хочется сделать select-sql казалось бы: Код: plaintext 1.
подскажите пожалуйста как бы сделать такую выборку? А где вы такой синтаксис про TOP нашли? Может так: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 11:32 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
проходящий.Top обычно идет сразу за словом select, а не где-то там в конце запроса. перестановка не помогла - ошибка таже ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 11:32 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
select в скобках отдельно исполняется удачно и с нужними данными Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 11:36 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
АлексейОпроходящий.Top обычно идет сразу за словом select, а не где-то там в конце запроса. перестановка не помогла - ошибка таже У вас в подзапросе нет поля postn, а вы его перечисляете как результат! Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 11:36 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
Aleksey-K, ну не помогает эта перестановка ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 11:37 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
Aleksey-KУ вас в подзапросе нет поля postn, а вы его перечисляете как результат! Код: plaintext 1. 2.
поправил - syntax error. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 11:41 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
добавлю что VFP 8 , полагаю что не принципиально. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 11:42 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
АлексейО, а версия VFP у вас какая ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 11:42 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
АлексейОдобавлю что VFP 8 , полагаю что не принципиально. Ничего себе не принципиально! Только в VFP 9.0 появились TOP n в корреляционных подзапросах: Вот цитата из HELP Что нового в SELECT-SQL VFP 9.0: TOP N in a Non-Correlated Subquery Visual FoxPro 9.0 supports the TOP N clause in a non-correlated subquery. The ORDER BY clause should be present if the TOP N clause is used, and this is the only case where it is allowed in subquery. The following is the general syntax for the TOP N clause in a non-correlated subquery. SELECT … WHERE … (SELECT TOP nExpr [PERCENT] … FROM … ORDER BY …) … С уважением, Алексей ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 11:44 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
Поправляю себя - в некорреляционных подзапросах. Как раз ваш случай. Переходите на VFP 9.0 или через временный курсор. С уважением, Алексей ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 11:49 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
Aleksey-K, Да . действительно. в 9ке синтакс прошел. однако получил не ту информацию что ожидал - разбираюсь... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 12:20 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
АлексейО, получается что подзапрос выполняется 1 раз а не на каждой иттерации основного запроса как ожидал я. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 12:51 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
АлексейОAleksey-K, Да . действительно. в 9ке синтакс прошел. однако получил не ту информацию что ожидал - разбираюсь... И не должны были получить :) Внутренний запрос выбирает TOP 1 из всех postn! Может так получится: Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 12:54 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
АлексейОАлексейО, получается что подзапрос выполняется 1 раз а не на каждой иттерации основного запроса как ожидал я. Тогда вам нужен внутренний корреляционный подзапрос. А он с TOP n и в VFP 9.0 не работает. С уважением, Алексей ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 12:58 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
Вместо решения "в лоб" через TOP 1 надо просто объединить таблицы и добавить исключение записей с датой, для которых существует бОльшая дата Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Разумеется, это имеет смысл, если нет дублей по дате. Точнее, нет двух записей с максимальной датой. Правда, не уверен, что такой запрос синтаксически корректен для VFP8. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 13:27 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
Aleksey-KМожет так получится: Код: plaintext 1. 2. 3. 4.
да. цель достигнута. но впрочем я ей достигал за 2 select-a и за меньшее время. я то надеялся что написав в одном я сокращю время. и практически уверен что scan выполнит это еще быстрее ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 13:29 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
ВладимирМВместо решения "в лоб" через TOP 1 надо просто объединить таблицы и добавить исключение записей с датой, для которых существует бОльшая дата Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
да. спасибо. это тоже работает, но практически за такое же время. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 13:35 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
АлексейОAleksey-KМожет так получится: Код: plaintext 1. 2. 3. 4.
да. цель достигнута. но впрочем я ей достигал за 2 select-a и за меньшее время. я то надеялся что написав в одном я сокращю время. и практически уверен что scan выполнит это еще быстрее Все зависит от наличия подходящих индексов. Например, по postn во всех таблицах и по dper в k2 С уважением, Алексей ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 13:35 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
Aleksey-KВсе зависит от наличия подходящих индексов. Например, по postn во всех таблицах и по dper в k2 да. эти индексы есть и 40 т. записей обрабатывает за 13-14 секунд, но этого мне мало. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 13:39 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
АлексейОAleksey-KВсе зависит от наличия подходящих индексов. Например, по postn во всех таблицах и по dper в k2 да. эти индексы есть и 40 т. записей обрабатывает за 13-14 секунд, но этого мне мало. Для отчета - вполне нормальное время. Пользователь воспримет такую задержку при выполнении отчета с пониманием и не будет "дергаться". А для текущей работы нет смысла отбирать 40 тысяч записей. Ни один пользователь не в состоянии "охватить" такой объем информации. Т.е. отбираемую информацию надо ограничить какими-либо дополнительными условиями. Например, движения сотрудников за последний месяц. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 13:51 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
ВладимирМ, да мне надо для оперативной работы и я могбы отобрать по условию первой таблицы, но это дает сокращение только на десятые, а фильтры по второй таблице невозможны (вдруг там нет движений за последний месяц, а сведения нужны) впрочем, всем СПАСИБО. а получил ответ. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 14:01 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
АлексейО, Все понятно... Но если движения может и не быть, я бы переделал INNER JOIN на LEFT JOIN и заменил бы k2_temp.cex и k2_temp.tabn на NVL(k2_temp.cex, 0) AS cex и NVL(k2_temp.tabn, 0) AS tabn соответственно (если они цифровые, иначе на пустую строку). Итого: Код: plaintext 1. 2. 3. 4.
Вдруг, будете перводить свое приложение на клиент-сервер. Проще будет эту операцию выполнить, если как можно больше в ANSI-SQL. С уважением, Алексей ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 14:12 |
|
выборка последнего движения
|
|||
---|---|---|---|
#18+
Aleksey-KНо если движения может и не быть, хоть одно движение есть, просто неизвестно когда оно, может человек устроился на завод 20 лет назад и простоял перед одним станком Aleksey-KВдруг, будете перводить свое приложение на клиент-сервер. Проще будет эту операцию выполнить, если как можно больше в ANSI-SQL. именно так я и рассуждал, но ... 4 секунды против 13-ти ... я выбрал scan. СПАСИБО за помощь. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.12.2008, 14:18 |
|
|
start [/forum/topic.php?fid=41&msg=35739579&tid=1586911]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 177ms |
0 / 0 |